vue组件间通信解析

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

相关链接\组件通信:点击查看

学习链接: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组件学习教程进行学习。

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

(0)

相关推荐

  • 详解vue组件通信的三种方式

    1. 第一种方式就是官方推荐的 官方推荐方式 有时候两个组件也需要通信(非父子关系).在简单的场景下,可以使用一个空的 Vue 实例作为中央事件总线. 本质是通过派发事件然后监听事件从而更改值,(父子组件通信也可用这个方式,但是不同的一点就是父子组件通信的时候可以不用一个空的Vue实例来做中转,这种方式我这里就不做演示的了,因为我的题目是非父子通信) 空的Vue实例 bus import Vue from 'vue' const bus = new Vue() export default bu

  • vue2.0父子组件及非父子组件之间的通信方法

    1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: <parent> <child :child-msg="msg"></child>//这里必须要用 - 代替驼峰 </parent> data(){ return { msg: [1,2,3] }; } 子组件通过props来接收数据: 方式1: props: ['childMsg'] 方式2 : props: { childMsg: Arr

  • 详解Vue组件之间的数据通信实例

    最近在用vue做项目,学习了不少东西,但是有时候光顾着做项目却忘记要找个时间来整理一下最近的一些学习新得,因为是新手,所以可能会有错误的地方,欢迎指出和交流呀~~~ 关于父子组件以及非父子组件之间的数据通信 1 父子组件之间数据通信 一般父组件向子组件传递数据用prop进行传递,注意,子组件不能对prop中的数据进行更改,vue中规定是防止子组件对父组件中的数据进行窜改.而子组件向父组件进行数据传递则可以通过事件触发父组件的事件来实现数据的传递.(是不是有点懵逼了,看个例子吧 ) (这里我就直接

  • Vuejs第十篇之vuejs父子组件通信

    本篇文章是小编结合官方文档整理的一套更加细致,代码更多更全的教程,非常不错,比较适合新手阅读. 本篇资料来于官方文档: http://cn.vuejs.org/guide/components.html#u7236_u5B50_u7EC4_u4EF6_u901A_u4FE1 父子组件通信 ①访问子组件.父组件.根组件: this.$parent 访问父组件 this.$children 访问子组件(是一个数组) this.$root 根实例的后代访问根实例 示例代码: <div id="a

  • Vue 父子组件、组件间通信

    本人对Vue组件间通信不懂,搜索了很多关于Vue 父子组件间通信介绍,下面我来记录一下,有需要了解Vue 父子组件.组件间通信的朋友可参考.希望此文章对各位有所帮助. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>组件</title> <meta name="viewport"

  • 深入探讨Vue.js组件和组件通信

    基本是按照官网的 Guide 全部梳理了一遍:http://vuejs.org/guide/index.html 这里我们以一个 Todo List 应用为例来把相关的只是都串起来,这篇里面的全部代码都在github上 https://github.com/lihongxun945/vue-todolist  Vue 实例 一个 Vue 应用是由一个 root vue instance 引导启动的,而 Vue instance 是这么创建的: var vm = new Vue({ // opti

  • Vue组件通信实践记录(推荐)

    组件通信 几乎所有的mvvm框架中都要涉及组件通信的功能(吐槽一下knockout,毕竟是鼻祖就先不说它了).而且目前的前端形式来看,组件化是一个项目的基础.所以选好一个合适的框架后,随着组件的不断增加,业务的复杂度提升,组件之间的通信变得尤为重要. 实践方法 由于更换新的框架,我们的项目由Avalon更新成Vue.但是为了兼容以前的业务代码,不能直接使用vue的标准实践方式,我还是拿过来后封装了一个vue的class,具体业务里面不影响使用,封装的过程之后写出来再聊吧,下面来总结一下最近用到的

  • Vue2.x中的父子组件相互通信的实现方法

    业务场景:(这里指的是直接父子级关系的通信) 美女(子组件)将消息发送给大群(父组件) 大群(父组件)收到美女发送的消息后再回个信息给美女(子组件) 父组件 template <template> <div> <p>群消息girl:</p> <div> {{ somebody }} 说: 我 {{ age }} 了. </div> <hr> <v-girl-group :girls="aGirls"

  • 详解vue2.0组件通信各种情况总结与实例分析

    Props在vue组件中各种角色总结 在Vue中组件是实现模块化开发的主要内容,而组件的通信更是vue数据驱动的灵魂,现就四种主要情况总结如下: 使用props传递数据---组件内部 //html <div id="app1"> <i>注意命名规定:仅在html内使用my-message</i> <child my-message="组件内部数据传递"></child> </div> //js

  • vue组件间通信解析

    组件间通信(父子,兄弟) 相关链接\组件通信:点击查看 学习链接:Vue.js--60分钟快速入门点击查看 分分钟玩转Vue.js组件点击查看 父组件传子组件 父传子方法(一) 属性传递 props //子组件 <template> <ul> <li v-for="item in dataList">{{item}}</li> </ul> </template> <script> export defa

  • Vue组件间通信 Vuex的用法解析

    上回说到Vue组件间通讯,最后留了一个彩蛋~~~Vuex.Vuex是另一种组件通讯的方法,这节来说说Vuex(store仓库). 首先Vuex需要安装,安装的方式有很多,在这里就不一一细说了.我是通过npm方式安装的: npm install vuex --save 安装好之后需要再main.js里全局引入: import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex)new Vue({el:'#app',store,components

  • vue组件间通信六种方式(总结篇)

    前言 组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.一般来说,组件可以有以下几种关系: 如上图所示,A 和 B.B 和 C.B 和 D 都是父子关系,C 和 D 是兄弟关系,A 和 C 是隔代关系(可能隔多代). 针对不同的使用场景,如何选择行之有效的通信方式?这是我们所要探讨的主题.本文总结了vue组件间通信的几种方式,如props. $emit / $on .vuex. $parent / $children . $attrs

  • 超详细的vue组件间通信总结

    目录 前言 一.props.$emit单向数据流 二.$parent.$children 三.$attrs.$listeners 四.provide.inject 五.eventBus(事件总线) 六.vuex 七.localstorage 总结 前言 组件通信在我们平时开发过程中,特别是在vue和在react中,有着举足轻重的地位.本篇将总结在vue中,组件之间通信的几种方式: props.$emit $parent.$children $attrs.$listeners provide.in

  • vue组件间通信子与父详解(二)

    接着vue组件父与子通信详解继续学习. 二.组件间通信(子组件传值给父组件) 通过事件的方式来完成数据的传输. ①在父组件中 定义一个方法,用来接收子组件所通过事件传来的值 methods:{ recvMsg:function(msg){ //参数msg就是子组件通过事件出来的数据 } } ②绑定事件处理函数 事件一般情况 都是自定义事件 <child-component @myEvent="recvMsg"></child-component> ③在子组件触发

  • Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)

    前言 除了使用 Vuex 方法外,vue 提供了各种各样的组件间通信的方案.文章整理一下父子组件.兄弟组件.祖先后代组件间是如何通信的.

  • vue组件间通信全面讲解

    目录 前言 组件介绍 一.父传子 1. 父组件通过 props 传递数据给子组件 2. 定义props的类型和默认值 二.子传父 子组件通过 $emit 传递数据给父组件 三.非父子组件间数据传递 1.通过公有的父组件进行非父子组件间的通信 2. 通过使用一个空的 Vue 实例作为中央事件总线 小结 前言 本章我们将介绍组件间是如何实现数据通信的.包括父组件向子组件.子组件向父组件.兄弟组件.非关系组件之间的数据通信. 组件通信是组件式开发中非常重要的一部分,也是组件式开发中的难点. 组件介绍

  • Vue如何实现组件间通信

    1. 父子间通信 最常见的就是父子之间的通信,通信是双向的数据传递. 1.1 父组件 --> 儿子组件 父组件向儿子组件传递数据的方式就是 通过 Prop 向子组件传递数据. //child.vue <template> <div> 我是儿子,我收到来自父亲的数据为 {{value}} </div> </template> <script> export default { props:{ value: String } } //App.v

  • Vue常见组件间通信方案及典型应用场景详解

    目录 什么是组件通信 1.父子组件通信场景 2.兄弟组件通信场景 3.根组件和后代组件通信场景 4.插槽通信场景 5 无直接关系的组件通信场景 6 大型项目中的复杂组件通信场景 - Vuex状态管理 7 其他的一些组件通信方案 总结 什么是组件通信 所谓组件通信,就是组件之间的数据交互,也就是把一个组件A里面的数据传递到另一个组件B,并能够让组件B根据这个数据更新界面. 在 Vue中,可用的通信方案有很多,下面给大家描述几个常用的组件通信方案及其典型的应用场景. 1.父子组件通信场景 父子组件通

随机推荐