网站首页 > 技术文章 正文
在 Vue 中,实现子组件通过 v-model 向父组件传递数据并接收后进行格式化,可以按照以下步骤来封装和实现:
步骤 1: 子组件实现 v-model
子组件需要定义一个 props 来接收 v-model 的值,并通过 emit 方法发出更新事件。
<!-- AmountSelector.vue -->
<template>
<input
type="number"
:value="modelValue"
@input="onInput($event.target.value)"
/>
</template>
<script>
export default {
props: {
modelValue: {
type: Number,
required: true
}
},
methods: {
onInput(value) {
// 发出 input 事件,以更新父组件的数据
this.$emit('update:modelValue', Number(value));
}
}
};
</script>
步骤 2: 父组件使用子组件并接收数据
在父组件中,可以通过 v-model 绑定子组件的值,并定义一个方法或计算属性来格式化数据
<!-- ParentComponent.vue -->
<template>
<div>
<AmountSelector v-model="amount" />
<p>Formatted Amount: {{ formattedAmount }}</p>
</div>
</template>
<script>
import AmountSelector from './AmountSelector.vue';
export default {
components: {
AmountSelector
},
data() {
return {
amount: 0 // 初始金额值
};
},
computed: {
formattedAmount() {
// 定义数据格式化,例如添加货币符号或小数点处理
return `${this.amount.toFixed(2)}`;
}
}
};
</script>
实现解析
- 子组件 (AmountSelector.vue):接收 modelValue 作为 props,即 v-model 的值。使用 this.$emit('update:modelValue', value) 来触发父组件更新数据。
- 父组件 (ParentComponent.vue):使用 v-model 绑定子组件,数据变动时,父组件自动接收并更新。使用 computed 属性或方法来格式化接收到的数据。
这种方式实现了数据的双向绑定,子组件通过 v-model 修改值后,父组件会实时接收并可对其进行格式化或进一步处理。
猜你喜欢
- 2024-11-17 fastapi+vue3文件上传(vue ftp上传)
- 2024-11-17 从零开始构建PDF阅读器(最简单的pdf阅读器)
- 2024-11-17 Dooring可视化之从零实现动态表单设计器
- 2024-11-17 在 FastAPI 中处理表单和用户输入:综合指南
- 2024-11-17 Laravel9表单的验证(validate表单验证)
- 2024-11-17 第63节 Form表单-Web前端开发之JavaScript-王唯
- 2024-11-17 Gateway结合Sentinel1.8限流熔断及自定义异常
- 2024-11-17 手机网站常见问题总结(手机网站出现错误怎么办)
- 2024-11-17 CSS实现去除Input框默认样式的详细教程
- 2024-11-17 企业必备实战之Sentinel规则Nacos持久化
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-