先看.sync 的官方定义
再来看v-model
两者要实现的目的都是一样,子组件和外部数据同步,双向绑定
先看.sync 的官方定义
再来看v-model
两者要实现的目的都是一样,子组件和外部数据同步,双向绑定
v-model
v-model
绑定的是 value , 语义上是指绑定组件的值, 如 el-input
的 v-model
就是指输入的值,.sync
.sync
只是一个双向绑定的语法糖,是指允许子组件内部修改父组件的状态。 如<el-dialog :visible.sync='dialogVisible'></el-dialog>
就只是说,组件el-dialog
的visible
状态可以被组件内部改变。两者共同点是都是双向绑定元素,不同点是 v-model
双向绑定的是value
, .sync
可以双向绑定任何属性(prop)
综上,其实就是说,
如果一个组件需要双向绑定的属性,
它有值么? 有就用 v-model
, 如el-input
的值可能是用户输入的字符串, el-form
的值可能是 a=b&c=d
, 也有可能是 { a:'b', c:'d' }
如果没有值,如一个对话框el-dialog
只有显隐状态(visible.sync),没有值(当然,如果你认为它有值,那也可以用v-model
)。
v-model一般是表单组件,绑定的是value属性,这个值的双向绑定也不是父组件和子组件的关系,而是view和model的对应关系,因为表单组件的值的变化来自于用户输入
而sync是指父子组件之间的通信
6 回答2.9k 阅读✓ 已解决
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
6 回答2.2k 阅读
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
先上结论:两者的本质都是语法糖,目的都是实现组件与外部数据的双向绑定。v-model 是 .sync的一种体现。.sync 比较灵活;v-model较单一
这里引用官方的一段话:组件实例的作用域是孤立的。这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据。父组件的数据需要通过 prop 才能下发到子组件中
sync和v-model 都是通过prop把外部数据下发到组件,组件再通过event把内部发生变化的数据回传回去。
上代码,可以直接单文件执行