今天在工作的时候遇到了vue的这个bug。原来是因为Vue的Prop是单向数据流,父组件的更新会流动到子组件的prop中,但是子组件不可以自己改变prop的值。
看看报错那一行,我是直接复制的AntD官方文档的代码:
1 | <a-modal v-model:visible="visible" title="Basic Modal" @ok="handleOk"> |
而visibile就是props中报错的那个变量。
但是我感觉没有改visible中的值呀?问了下前辈才知道原来v-model提供的是双向绑定!上面这样写可能表达不清楚,我们这样写:
1 | v-model:a="b" |
这样如果a改变了b的值也会改变,如果b改变了a的值也会给改变。所以Vue才报错了,因为我给了a在组件内修改b的权限,而b作为props中的属性是不应该在子组件中被修改的。
这也是v-model和v-bind的区别,v-model是双向绑定,v-bind是单向绑定。