假设Header和List是兄弟组件。一般情况下,兄弟组件是不能通讯的:缺少中间的黄线
原始解决方式:
- 父组件用函数建立起与子组件的关系
- 子组件用props接收父组件传递过来的函数(props可以接收函数)
- 在子组件里面使用父组件的函数(调用的是App.vue的函数)
- 将数据当参数传递给父组件
- List组件又可以用props接受到App.vue传递过来的东西
//App.vue
<MyHeader :addTodo="addTodo"></MyHeader>
<List :todos="todos"></List>
methods: {
addTodo(C) {
//操作data中的数据
this.todos.unshift(C);
},
},
此段代码实现了父传子,子传父
//header
//接收父组件传递的addTodo
props: ["addTodo"],
methods: {
add(e) {
const todoObj = { id: Date.now(), title: e.target.value, done: false };
console.log(todoObj);
//此处调用的函数是App.vue里的函数
this.addTodo(todoObj); //将todoObj对象传递给App.vue里的函数addTodo
},
},