vue组件间通信解析
组件间通信(父子,兄弟)
相关链接\组件通信:点击查看
学习链接:Vue.js——60分钟快速入门
分分钟玩转Vue.js组件点击查看
父组件传子组件
父传子方法(一)属性传递props
//子组件 <template> <ul> <liv-for="itemindataList">{{item}}</li> </ul> </template> <script> exportdefault{ props:{dataList:[]} } </script>
//父组件 <template> <component-childv-bind:data-list="dataList"></component-child> <inputv-model="dataInput"v-on:keyup.13="addDataItem()"></input> </template> <script> importComponentChildfrom'./child.vue' exportdefault{ data(){ return{ dataInput:"", dataList:['helloworld!','welcometousevue.js'] } }, components:{ComponentChild}, methods:{ addDataItem(){ letself=this if(!(self.dataInput&&self.dataInput.length>0)){return} self.dataList.push(self.dataInput) self.dataInput="" } } } </script>
父传子方法(二)广播事件传递vm.$broadcast
//子组件 <template> <ul> <liv-for="itemindataList">{{item}}</li> </ul> </template> <script> exportdefault{ data(){ return{ dataList:['helloworld!','welcometousevue.js'] } }, events:{ addChildDataEvent:function(dataInput){ this.dataList.push(dataInput) } } } </script>
//父组件 <template> <component-child></component-child> <inputv-model="dataInput"v-on:keyup.13="addDataItem()"></input> </template> <script> importComponentChildfrom'./child.vue' exportdefault{ data(){ return{dataInput:""} }, components:{ComponentChild}, methods:{ addDataItem(){ letself=this if(!(self.dataInput&&self.dataInput.length>0)){return} //广播到子组件 self.$broadcast('addChildDataEvent',self.dataInput) self.dataInput=""} } } </script>
子组件传父组件
子传父方法派遣事件传递vm.$dispatch
//子组件 <template> <inputv-model="dataInput"v-on:keyup.13="addDataItem()"></input> </template> <script> exportdefault{ data(){ return{ dataInput:"" } }, methods:{ addDataItem(){ letself=this if(!(self.dataInput&&self.dataInput.length>0)){return} //派遣事件到父组件 self.$dispatch('addFatherDataEvent',self.dataInput) self.dataInput="" } } } </script>
//父组件 <template> <ul> <liv-for="itemindataList">{{item}}</li> </ul> <component-child></component-child> </template> <script> importComponentChildfrom'./child.vue' exportdefault{ data(){ return{ dataList:['helloworld!','welcometousevue.js'] } }, components:{ComponentChild}, events:{ addFatherDataEvent:function(dataInput){ this.dataList.push(dataInput) } } } </script>
兄弟组件互传
父组件代理传递子(vm.dispatch)父(vm.broadcast)子事件方法传递
<template> <ul> <liv-for="itemindataList">{{item}}</li> </ul> </template> <script> exportdefault{ data(){ return{ dataList:['helloworld!','welcometousevue.js'] } }, events:{ addChildDataEvent:function(dataInput){ this.dataList.push(dataInput) } } } </script>
<template> <inputv-model="dataInput"v-on:keyup.13="addDataItem()"></input> </template> <script> exportdefault{ data(){ return{dataInput:""} }, methods:{ addDataItem(){ letself=this if(!(self.dataInput&&self.dataInput.length>0)){return}//派遣事件到父组件 self.$dispatch('agentDataEvent',self.dataInput) self.dataInput="" } } } </script>
<template> <component-child1></component-child1> <component-child2></component-child2> </template> <script> importComponentChild1from'./child1.vue' importComponentChild2from'./child2.vue' exportdefault{ components:{ComponentChild1,ComponentChild2}, events:{ agentDataEvent:function(dataInput){ this.$broadcast('addChildDataEvent',dataInput) } } } </script>
实例间通信
把实例当做参数传入另一个实例
<template> <div> <p>实例间通信</p> <ul> <liv-for="itemindataList">{{item}}</li> </ul> </div> </template> <script> exportdefault{ data(){ return{ dataList:['helloworld!','welcometousevue.js'] } }, events:{ addDataEvent:function(dataInput){ this.dataList.push(dataInput) } } } </script>
<template> <inputv-model="dataInput"v-on:keyup.13="addDataItem()"></input> </template> <script> exportdefault{ data(){ return{ dataInput:"", otherApp:{} } }, methods:{ addDataItem(){ letself=this if(!(self.dataInput&&self.dataInput.length>0)){return}//触发其他实例事件 self.otherApp.$emit('addDataEvent',self.dataInput) self.dataInput="" }, setOtherApp(app){ this.otherApp=app } } } </script>
importVuefrom"vue" importApp1from"./communication5/app1.vue" importApp2from"./communication5/app2.vue" letAppVM1=newVue(App1).$mount('#app') letAppVM2=newVue(App2).$mount('#app2') AppVM2.setOtherApp(AppVM1)
本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。
关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。