这篇文章主要介绍了在vue中使用v-model 双向绑定父子组件时需要注意哪些问题,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:

vue是什么软件
Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它大型框架的区别是,使用Vue可以自底向上逐层应用,其核心库只关注视图层,方便与第三方库和项目整合,且使用Vue可以采用单文件组件和Vue生态系统支持的库开发复杂的单页应用。
[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "value"
引发这个警告的是一个自定义组件RxSelect
Vue.component("RxSelect", {
model: {
prop: "value",
event: "change",
},
props: {
value: [Number, String],
map: Map,
},
template: `
`,
});吾辈使用的代码看起来代码貌似没什么问题?
当前选择的性别是: {{map.get(sex)}}
JavaScript 代码
new Vue({
el: "#app",
data: {
map: new Map().set(1, "保密").set(2, "男").set(3, "女"),
sex: "",
},
});经测试,程序本身运行正常,父子组件的传值也没什么问题,双向数据绑定确实生效了,然而浏览器就是一直报错。
尝试解决
吾辈找到一种方式
为需要双向绑定的变量在组件内部
data声明一个变量innerValue,并初始化为value在
select上使用v-model绑定这个变量innerValue监听
value的变化,在父组件中value变化时修改innerValue的值监听
innerValue的变化,在变化时使用this.$emit('change', val)告诉父组件需要更新value的值
Vue.component("RxSelect", {
model: {
prop: "value",
event: "change",
},
props: {
value: [Number, String],
map: Map,
},
data() {
return {
innerValue: this.value,
};
},
watch: {
value(val) {
this.innerValue = val;
},
innerValue(val) {
this.$emit("change", val);
},
},
template: `
`,
});使用代码完全一样,然而组件RxSelect 的代码却多了许多。。。
解决
一种更优雅的方式是使用computed 计算属性以及其的get/set,代码增加的程度还是可以接受的
Vue.component("RxSelect", {
model: {
prop: "value",
event: "change",
},
props: {
value: [Number, String],
map: Map,
},
computed: {
innerValue: {
get() {
return this.value;
},
set(val) {
this.$emit("change", val);
},
},
},
template: `
`,
});到此这篇关于在vue中使用v-model 双向绑定父子组件时需要注意哪些问题的文章就介绍到这了,更多相关在vue中使用v-model 双向绑定父子组件时需要注意哪些问题的内容请搜索创新互联网站建设公司,以前的文章或继续浏览下面的相关文章希望大家以后多多支持创新互联网站建设公司,!
网站题目:在vue中使用v-model双向绑定父子组件时需要注意哪些问题-创新互联
网页网址:http://jxjierui.cn/article/dggpss.html


咨询
建站咨询
