组件通信方式
作者:互联网
第一种通信方式props
使用场景:[父子通信]
传递数据类型:
1:可能是函数 -----------实质子组件想给父亲传递数据
2:可能不是函数-----------实质就是父亲给子组件传递数据
接受方式:
1.props:['xxx']
2.props:{xxx:string}
3.props:{
xxx:{
type:String, //类型
required:true, //必要性
default:'老王' //默认值
}
}
特殊情况:路由传递props
1:布尔值类型,把路由中params参数映射为组件props数据
2:对象,静态数据,很少用
3:函数,可以把路由中params|query参数映射为组件props数据
第二种通信方式 自定义事件 $on $emit
1. 一种组件间通信的方式,适用于:<strong style="color:red">子组件 ===> 父组件</strong>
2. 使用场景:A是父组件,B是子组件,B想给A传数据,那么就要在A中给B绑定自定义事件(<span style="color:red">事件的回调在A中</span>)。
3. 绑定自定义事件:
第一种方式,在父组件中:```<Demo @atguigu="test"/>``` 或 ```<Demo v-on:atguigu="test"/>```
第二种方式,在父组件中:
<Demo ref="demo"/>
......
mounted(){
this.$refs.xxx.$on('atguigu',this.test)
}
4.若想让自定义事件只能触发一次,可以使用```once```修饰符,或```$once```方法。
5. 触发自定义事件:```this.$emit('atguigu',数据)```
6. 解绑自定义事件```this.$off('atguigu')```
7. 组件上也可以绑定原生DOM事件,需要使用```native```修饰符。
8. 注意:通过```this.$refs.xxx.$on('atguigu',回调)```绑定自定义事件时,回调<span style="color:red">要么配置在methods中</span>,<span style="color:red">要么用箭头函数</span>,否则this指向会出问题!
第三种通信方式 全局事件总线 Vue.prototype.$bus = this 一种组件间通信的方式,适用于任意组件间通信。
组件实例的原型的原型指向的Vue.prototype
安装全局事件总线:
new Vue({
......
beforeCreate() {
Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm
},
......
})
使用全局事件总线:
接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的<span style="color:red">回调留在A组件自身。</span>
methods(){
demo(data){......}
}
......
mounted() {
this.$bus.$on('xxxx',this.demo)
}
提供数据:this.$bus.$emit('xxxx',数据)
最好在beforeDestroy钩子中,用$off去解绑当前组件所用到的事件。
第四种方式,消息订阅与发布
-
一种组件间通信的方式,适用于任意组件间通信。
-
使用步骤:
-
安装pubsub:
npm i pubsub-js
-
引入:
import pubsub from 'pubsub-js'
-
接收数据:A组件想接收数据,则在A组件中订阅消息,订阅的回调留在A组件自身。
methods(){ demo(data){......} } ...... mounted() { this.pid = pubsub.subscribe('xxx',this.demo) //订阅消息 }
-
-
提供数据:
pubsub.publish('xxx',数据)
-
最好在beforeDestroy钩子中,用
PubSub.unsubscribe(pid)
去取消订阅。
第五种方式 vuex 一种万能的组件通信方式 数据非持久化
基本使用
//引入vue
import Vue from 'vue'
//引入vuex
import Vuex from 'vuex'
//应用Vuex插件
Vue.use(Vuex)
//引入vuex小仓库
......
export default new Vuex.Store({
modules: {
......
}
})
vuex基本环境
export default {
//开启命名空间
namespaced: true,
actions:{},
mutations:{},
state:{},
getters:{}
}
第六种方式 插槽
-
作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于 父组件 ===> 子组件 。
-
分类:默认插槽、具名插槽、作用域插槽
标签:自定义,方式,......,xxx,通信,事件,props,组件 来源: https://www.cnblogs.com/ljybg/p/16419289.html