适用于的场景:父子组件通信
注意事项:
如果父组件给子组件传递数据(函数):本质其实是子组件给父组件传递数据
如果父组件给子组件传递数据(非函数):本质就是父组件给子组件传递数据
书写方式:3种
[‘todos’],{type:Array},{type:Array,default:[]}
特殊情况:路由传递props
1:布尔值类型,把路由中params参数映射为组件props数据
2:对象,静态数据,很少用
3:函数,可以把路由中params|query参数映射为组件props数据
使用于场景:子组件给父组件传递数据
o n 与 on与 on与emit
使用于场景:万能
组件实例的原型的原型指向的Vue.prototype
Vue.prototype.$bus = this;
适用于场景:万能
vue当中几乎不用(因为vue中有全局事件总线和这个第三方提供的库功能重复)
在React框架中使用比较多(发布与订阅)
适用于场景:万能
数据非持久化
核心概念:
State:保存所有组件的共享状态
Getters:类似状态值的计算属性
Mutations:修改 State中状态值的唯一方法,里面包含状态变化监听器和记录器
Actions:用于异步处理 State中状态值,异步函数结束后调用Mutations
Modules:当一个 State 对象比较庞大时,可以将 State 分割成多个Modules 模块。
适用于场景:父子组件通信 — (结构)
默认插槽
具名插槽
作用域插槽:子组件的数据来源于父组件,但是子组件的自己的结构有父亲决定。
表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的
标签。$attrs/$listeners
和 provide/inject
,$attrs/$listeners
具有响应性且可以双向通信,provide/inject
无响应性且只能单向通信(父传子)props/emit
,方法比较基础,适合只有父子组件通信的方法,若想跨层级通信需要中间组件做转发,比较麻烦。CustomInput.vue
input包装组件
ModelTest.vue
{{ msg }}
SyncTest.vue
效果:
SyncTest.vue
小明的爸爸现在有{{money}}元
不使用sync修改符
使用sync修改符
Child.vue
小明每次花100元
爸爸还剩{{money}}元
效果:
小明的爸爸现在有{{money}}元
使用sync修改符
:money.sync,代表父组件给子组件传递props[money],给当前子组件绑定一个自定义事件(update:money)
新建HintButton
,里面放一个index.vue,这个文件用来封装按钮
AttrsListenersTest.vue
自定义带Hover提示的按钮
HintButton
这回我们子组件接收父组件传递过来的参数,我们就不用props了,我们利用组件实例身上的一个属性$attrs也可以接收父组件传递给子组件的数据
在子组件中打印一下$attrs
我们注释props:['title']
,利用$attrs接收参数的时候,会发现参数全部接收到了
我们打开props:['title']
,利用 a t t r s 接收参数的时候 , 会发现参数除了 p r o p s 接收的 t i t l e , 其他参数都被 attrs接收参数的时候,会发现参数除了props接收的title,其他参数都被 attrs接收参数的时候,会发现参数除了props接收的title,其他参数都被attrs接收了
所以,这里可以总结为:对于子组件而言,父组件给的数据可以利用props接收,注意,如果子组件通过props接收的属性,在$attrs属性当中是获取不到的
因为我们需要封装ElementUI按钮,并且是带Hover提示的按钮
在HintButton/index.vue
中:
我们在el-button外面来一个a标签,因为a标签有一个title属性,就带有提示功能
这个时候我们想给按钮绑定一个点击事件,点击弹出一个666什么的,我们知道HintButton是一个组件,在组件身上写@click他就变成了自定义事件了
@click.native其实是可以解决的,但是我们这里有另外的解决办法,所以我这样来演示:
父组件绑定自定义事件
我们想给HintButton
绑定单击事件 实际上是给el-button绑定单击事件
我们先看看$listeners
身上有没有父组件传递过来的自定义事件,并且利用v-on来给el-button绑定单击事件
在HintButton/index.vue
中:
子组件中
打印发现:$listeners确实可以获取父组件给子组件传递的自定义事件
此时我们再点击一个按钮,会发现成功弹出了666
l i s t e n e r s 与 listeners与 listeners与attrs(组件通信方式的一种)
他们两者都是组件实例的属性,可以获取到父组件给子组件传递的props与自定义事件