Vue
规定:在子组件中,不可以直接修改 props
外部数据。
- 但是我们常有在子组件中修改
props
的值并同步到父组件的需求,要实现这个需求,可以使用 JS 的发布、订阅功能(EventBus)。
- 看一个简单的例子: 在子组件
child
中,修改父组件 father
中的 n
的值
<tamplate>
<div>
{{compData}}
<br />
<button @click="$emit('update:compData', compdata + 1)">n + 1</button>
</div>
</tamplate>
<script>
export default {
props: ["compData"]
}
</script>
<tamplate>
<div>
父组件的 n:{{n}}
<br />
<Child :compData.sync="n"/>
</div>
</tamplate>
<script>
import Child from './child.vue'
export default {
data(){
return {
n: 100
}
},
components: {Child}
}
<script>
Vue
封装了 EventBus
- 使用
$emit
定义并触发事件,并传参;事件名应为:update:被监听的数据名
- 使用
$event
来获取其他组件中 $emit
的参数
- 以上,修饰符
.sync
就是通过 $event
获取其他组件中 $emit
参数这一操作的简写,是一个语法糖