1 回答

TA贡献1772条经验 获得超5个赞
我刚刚注意到您正在尝试修改propsVue 禁止的值。所有子组件都不能修改props从父组件传来的数据,因为它使数据流更难理解。您可以在官方网站上阅读更多相关信息:https ://vuejs.org/v2/guide/components-props.html#One-Way-Data-Flow
这就是为什么 Vue 也有data可以被组件修改的本地私有内存。
因此,要解决您的问题,您需要在挂载子组件时将数据复制props到子组件上,并改为修改 的值。datadata
这是更新的代码示例(Codepen 也更新了),它完全符合您的要求。
模板:
<div id="app">
<div>
<my-form :contact="contact"></my-form>
</div>
</div>
Javascript:
Vue.component('my-form', {
data() {
return { name: '', phone: '', email: '' }
},
props: {
contact: { type: Object, required: true }
},
mounted() {
this.name = this.contact.name;
this.phone = this.contact.phone;
this.email = this.contact.email;
},
template: `
<div>
<input v-model="name" />
<input v-model="phone"/>
<input v-model="email"/>
<p>
value of input: {{ JSON.stringify({ name, phone, email }) }}
</p>
</div>
`,
watch: {
name(value) {
if(value === 'john') {
this.phone = '123456';
this.email = 'test@gmail.com';
}
}
}
});
new Vue({
el: '#app',
data() {
return { contact: { name: 'initial name', phone: '123456', email: 'initial.email@gmail.com' } }
}
})
还有我更新的代码笔:https ://codepen.io/aptarmy/pen/PoqgpNJ
添加回答
举报