欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vue组件间通信解析

程序员文章站 2023-11-14 21:46:22
组件间通信(父子,兄弟) 相关链接\组件通信: 学习链接:vue.js——60分钟快速入门 分分钟玩转vue.js组件 父组件传子组件 父传子方法(一) 属性传递...

组件间通信(父子,兄弟)

相关链接\组件通信:

学习链接:vue.js——60分钟快速入门

分分钟玩转vue.js组件

父组件传子组件

父传子方法(一) 属性传递 props

//子组件
<template> 
 <ul>
 <li v-for="item in datalist">{{item}}</li>
 </ul> 
</template>

<script>
 export default { 
 props : { datalist : [] }
 }
</script>

//父组件
<template>
 <component-child v-bind:data-list="datalist"> </component-child> 
 <input v-model="datainput" v-on:keyup.13="adddataitem()" ></input>
</template>

<script>

import componentchild from './child.vue'
export default { 
 data () { 
 return { 
 datainput: "", 
 datalist : [ 'hello world!','welcome to use vue.js' ] 
 } 
 }, 
 components : { componentchild }, 
 methods : { 
 adddataitem () { 
 let self = this 
 if( !(self.datainput && self.datainput.length > 0) ) { return } 
 self.datalist.push( self.datainput ) 
 self.datainput = "" 
 } 
 }
}
</script>

父传子方法(二) 广播事件传递 vm.$broadcast

//子组件
<template> 
 <ul> 
 <li v-for="item in datalist">{{item}}</li> 
 </ul> 
</template>

<script>
export default { 
 data () { 
 return { 
 datalist : [ 'hello world!', 'welcome to use vue.js' ] 
 } 
 }, 
 events : { 
 addchilddataevent : function ( datainput ) { 
 this.datalist.push( datainput ) 
 } 
 }
}
</script>

//父组件
<template> 
 <component-child></component-child> 
 <input v-model="datainput" v-on:keyup.13="adddataitem()" ></input>
</template>

<script>
 import componentchild from './child.vue'
 export default { 
 data () { 
 return { datainput: "" } 
 }, 
 components : { componentchild }, 
 methods : { 
 adddataitem () { 
 let self = this 
 if( !(self.datainput && self.datainput.length > 0) ) { return } 
 //广播到子组件 
 self.$broadcast( 'addchilddataevent', self.datainput ) 
 self.datainput = "" } 
 }
 }
</script>

子组件传父组件

子传父方法 派遣事件传递 vm.$dispatch

//子组件
<template> 
 <input v-model="datainput" v-on:keyup.13="adddataitem()" ></input>
</template>

<script>
 export default { 
 data () { 
 return { 
 datainput: "" 
 } 
 }, 
 methods : { 
 adddataitem () { 
 let self = this
 if( !(self.datainput && self.datainput.length > 0) ) { return }
 //派遣事件到父组件 
 self.$dispatch( 'addfatherdataevent', self.datainput )
 self.datainput = "" 
 } 
 }
 }
</script>

//父组件
<template> 
 <ul> 
 <li v-for="item in datalist">{{item}}</li> 
 </ul> 
 <component-child></component-child>
</template>

<script>
import componentchild from './child.vue'
export default { 
 data () { 
 return { 
 datalist : [ 'hello world!', 'welcome to use vue.js' ] 
 } 
 },
 components : { componentchild }, 
 events : { 
 addfatherdataevent : function ( datainput ) { 
 this.datalist.push( datainput ) 
 } 
 }
}
</script>

兄弟组件互传

父组件代理传递 子(vm.dispatch )父 ( vm.broadcast )子 事件方法传递

<template> 
 <ul> 
 <li v-for="item in datalist">{{item}}</li> 
 </ul> 
</template>

<script> 
export default { 
 data () { 
 return { 
 datalist : [ 'hello world!', 'welcome to use vue.js' ] 
 } 
 },
 events : { 
 addchilddataevent : function ( datainput ) { 
 this.datalist.push( datainput ) 
 } 
 }
}
</script>

<template>
 <input v-model="datainput" v-on:keyup.13="adddataitem()" ></input>
</template>

<script>
export default { 
 data () { 
 return { datainput: "" } 
 }, 
 methods : { 
 adddataitem () { 
 let self = 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>
import componentchild1 from './child1.vue'
import componentchild2 from './child2.vue'

export default { 
 components : { componentchild1, componentchild2 }, 
 events : { 
 agentdataevent : function( datainput ) { 
 this.$broadcast('addchilddataevent', datainput) 
 } 
 }
}
</script>

实例间通信

把实例当做参数传入另一个实例

<template>
 <div> 
 <p>实例间通信</p> 
 <ul>
 <li v-for="item in datalist">{{item}}</li>
 </ul> 
 </div>
</template>
<script> 
export default { 
 data () { 
 return { 
 datalist : [ 'hello world!', 'welcome to use vue.js' ] 
 } 
 }, 
 events : { 
 adddataevent : function ( datainput ) { 
 this.datalist.push( datainput ) 
 } 
 }
}
</script>
<template>
<input v-model="datainput" v-on:keyup.13="adddataitem()" ></input>
</template>

<script>
export default { 
 data () { 
 return { 
 datainput: "", 
 otherapp : {} 
 } 
 }, 
 methods : { 
 adddataitem ( ) { 
 let self = this 
 if( !(self.datainput && self.datainput.length > 0) ) { return } //触发其他实例事件 
 self.otherapp.$emit( 'adddataevent', self.datainput ) 
 self.datainput = "" 
 }, 
 setotherapp ( app ) { 
 this.otherapp = app 
 }
 }
 
}
</script>

import vue from "vue"
import app1 from "./communication5/app1.vue"
import app2 from "./communication5/app2.vue"

let appvm1 = new vue( app1 ).$mount('#app')
let appvm2 = new vue( app2 ).$mount('#app2')

appvm2.setotherapp( appvm1 )

本文已被整理到了《vue.js前端组件学习教程》,欢迎大家学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。