Vue通过prop进行双向数据绑定。子组件数据变动,个别只能通过 this.$emit(func, val) 回调父组件函数来传值给父组件。
Vue2.3版本引入sync,作为一个事件绑定语法糖,当子组件触发事件时,父组件会响应事件并实现数据更新: 官网
1. 应用Vue.sync和this.$emit('update:title', newTitle)
父组件代码:
data() { return { val: '' }},<child :childValue.sync="val"></child><div>{{val}}</div>
子组件代码:
props: { childValue: { type: String, default: '' },},data() { return { val: '' }},methods: { checkVal() { this.$emit('update:childValue', this.val) },}<input type="text" v-model="val" @input="checkVal">
下面的办法就是能够在子组件更改父组件的值了,除此之外,还能够应用$emit(fun, val)办法和$parent:
2. 应用$emit(fun, val)
父组件代码:
data() { return { val: '' } }, methods: { checkVal(val) { this.val = val }, }<child @checkVal="checkVal"></child><div>{{val}}</div>
子组件代码:
props: {},data() { return { val: '' }},methods: { checkVal() { this.$emit('checkVal', this.val) },}<input type="text" v-model="val" @input="checkVal">
3. 应用$parent
父组件代码:
data() { return { val: '' } }, methods: { checkVal(val) { this.val = val }, }<child></child><div>{{val}}</div>
子组件代码:
props: {},data() { return { val: '' }},methods: { checkVal() { // 通过 $parent层叠能够一层一层地往上追溯各级父组件,比方this.$parent.$patent.checkVal() this.$parent.checkVal(this.val) },}<input type="text" v-model="val" @input="checkVal">