【发布时间】:2020-09-26 07:10:23
【问题描述】:
注意:我制作了这个问题的视频版本,您可以在此处查看: https://www.loom.com/share/6a23d0791c2444068e964b388ed5497e
VueJS 文档讨论了如何使用 v-model 和 components: https://vuejs.org/v2/guide/components.html#Passing-Data-to-Child-Components-with-Props
如果我创建的组件完全符合文档中的规定,它就可以正常工作。代码如下:
Vue.component('custom-input', {
props: ['value'],
template: `
<input
v-bind:value="value"
v-on:input="$emit('input', $event.target.value)"
>
`
})
但现在让我尝试更改该组件中道具的名称——例如,改为bar:
Vue.component('custom-input', {
props: ['bar'],
template: `
<input
v-bind:value="bar"
v-on:input="$emit('input', $event.target.value)"
>
`
})
现在它只工作了一半。也就是说,假设我将custom-input 绑定到一个名为message 的数据属性,如下所示:<custom-input v-model="message"></custom-input>。如果我动态更新message 的值,那么custom-input 的值将更新 -- 但只会更新一次。如果我再次更新该值,它将不会更新custom-input 的值。
但是,如果我将道具名称改回value(而不是bar),那么每次更新message 的值时,custom-input 的值都会更新。
[再次,这是我正在谈论的视频描述:https://www.loom.com/share/6a23d0791c2444068e964b388ed5497e]
这是为什么呢?为什么我给道具起什么名字很重要?是否必须将其命名为value,因为我绑定到value 属性?如果有,为什么?
简而言之,这里发生了什么?
谢谢。
【问题讨论】:
标签: vue.js vuejs2 vue-component