下面这个例子,父组件输入新内容,子组件会同步更新,但是子组件输入内容父组件不变,怎么实现双向互动?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app">
<div>
父组件输入:<input v-model="parentMsg">
<br>
子组件输入:<child v-bind:message="parentMsg"></child>
</div>
</div>
<script>
// 注册
Vue.component('child', {
// 声明 props
props: ['message'],
// 同样也可以在 vm 实例中像 “this.message” 这样使用
template: '<input v-model="message">'
})
// 创建根实例
new Vue({
el: '#app',
data: {
parentMsg: '父组件输入值'
}
})
</script>
</body>
</html>
数据双向绑定,单向数据流。
可以看到你给子组件写的
v-bind:message="parentMsg"
。本身这里就只是传入,所以你可以
v-model
或者sync
或者其他的方式,改成双向的。然后呢,再看你子组件怎么写的
props: ['message'],template: '<input v-model="message">'
。 Vue 是允许你这样去修改内容的,你需要通过emit
通知父组件。还有一种方式就是对象,引用方式,js里面基本类型(数值,字符串)都是传值。对象和数组才是传引用。
那好了总结一下解决放哪。
父子组件通信 emit