- 组件通讯
- 注册组件
-
为什么要拆分组件?
不可能吧所有的功能都写到App.vue中
封装组件的目的:
复用
可维护
-
1. 把独立的结构封装到一个.vue文件中
-
2. 注册组件
全局注册
在main.js中通过Vue.component(名字, 组件)
所有组件中都能使用
局部注册
在components配置中局部注册组件
只有在当前组件中可以使用
-
3. 组件样式冲突问题
默认情况,组件的样式会影响到所有的组件
给style标签添加scoped属性,可以保证组件的样式只影响当前组件本身
原理
给style中所有的选择器添加一个额外的data属性
给组件模板中所有的结构也添加一个额外的属性
- 组件通讯
-
为什么?
因为每个组件的数据都是独立的
但是开发中有需求去使用别的组件的数据
-
父传子
<Son :money="money" a="b"></son>
props: ['money', 'a']
-
子传父
<Son @del="del"></son>
this.$emit('del', 参数)
-
todos功能
-
todos
全选反选
数据的持久化
任务的筛选功能
-
event-bus
1. 创建事件总线
const bus = new Vue()
2. 订阅事件
在组件created中订阅事件
eventBus.$on('事件名字', 回调函数)
注意:回调函数要使用箭头函数
3. 发布事件
eventBus.$emit(事件名, 参数)
注意:触发的事件名和监听的事件名一致