【发布时间】:2021-01-06 13:48:42
【问题描述】:
使用v-model 在组件内的视图和数据模型之间创建双向绑定。并且视图交互可以向父组件发出事件。
但是,有可能让子组件中的数据模型更改向父组件发出事件吗?
因为只要用户是单击复选框的人,父母和孩子的事情都很好(数据模型更新并发出事件)。但是,如果我打开 Vue 开发工具并切换子组件数据中的复选框,来自v-model 的双向绑定将在 CHILD 组件中进行适当的更新,但没有任何东西可以将其转移到父组件(我怀疑是因为没有发出事件)。
如何确保父组件“知道”子组件中的数据更改?我认为这必须以某种方式实现......如果不是从子组件发出,也许有某种方法可以让父组件“监视”子组件的数据?
感谢您的帮助或指导!在此期间,我会继续阅读并寻找答案!
子组件
<template>
<div class="list-item" v-on:click="doSomething">
<input type="checkbox" v-model="checked">
<label v-bind:class="{ checked: checked }">{{ name }}</label>
</div>
...
</template>
<script>
...
data: function() {
return {
checked: false,
}
},
methods: {
doSomething() {
...
this.$emit('doSomething', this)
}
}
</script>
父组件
<template>
<ChildComponent v-on:doSomething="getItDone"></ChildComponent>
...
</template>
<script>
...
methods: {
getItDone(target) {
...
}
}
</script>
更新:在尝试了更多@IVO GELOV 的解决方案之后,我现在遇到的问题是,当涉及多个子组件时,由于父级的 myBooleanVar 的一个奇异值驱动整个事情,选中一个子组件的框会导致所有子组件被选中。
因此,在视图和数据操作都将其移交给父级方面,这绝对是一个进步,但我仍在试图弄清楚如何“隔离”这种情况,以便只有一个被操作的子组件被拖动参加聚会...
【问题讨论】:
标签: vue.js vue-component two-way-binding v-model vue-data