Vue组件通讯

  Vue最常用的组件通讯有三种:父->子组件通讯、子->父组件通讯,兄弟组件通讯.(template用的pug模板语法)

1.父->子组件通讯

  父->子组件通讯,是通过props进行数据传递,并且具有这几个特性,单向传递,子组件接收的数据不可以更改,如果更改,会发出警告,每次父组件更新时,子组件的所有 prop 都会更新为最新值.

 1 父组件
 2 <template lang="pug">
 3    .father
 4      Children(:name=‘msg‘)
 5 </template>
 6 <script>
 7
 8 import Children from ‘./Children‘
 9 export default {
10  name: ‘father‘,
11    data () {
12      return {
13        msg: ‘我是father的数据‘
14      }
15    }
16  }
17 </script>
1 子组件
2  <template lang="pug">
3   .children
4     .box {{name}}
5 </template>
6
7 <script>
8 export default {
9   name: ‘father‘,
10   // props: [‘name‘],  1.props的第一种写法
11   // props: {      2.props的第二种写法
12   //   name: Array
13   // },
14   props: {        3.props的第三中写法(推荐)
15     name: {
16       type: String
17     }
18   },
19   data () {
20     return {
21       msg: ‘我是children的数据‘
22     }
23   }
24 }
25 </script>
 1 2.子->父组件通讯
 2
 3    一般子->父组件通讯是通过Events事件进行值得传递
 4
 5  父组件
 6   <template lang="pug">
 7    .father
 8      Children(@hand=‘hand‘) //自定义事件1 </template>
 9
10 <script>
11 import Children from ‘./Children‘
12 export default {
13   name: ‘father‘,
14  data () {
15     return {
16       msg: ‘我是father的数据‘
17     }
18   },
19   components: {
20      Children
21    },
22   methods: {
23     hand (msg) {
24       alert(msg)  //拿到子组件传递的值
25     }
26   }
27 }
28 </script>
 1 子组件
 2 <template lang="pug">
 3   .children
 4     input(type=‘button‘ value=‘clickMe‘ @click=‘handle‘)
 5 </template>
 6
 7 <script>
 8 export default {
 9   name: ‘children‘,
10   data () {
11     return {
12       msg: ‘我是children的数据‘
13     }
14   },
15   methods: {
16     handle () {
17       this.$emit(‘hand‘, this.msg)  //发送事件名+传递的值
18     }
19 }
20 </script>

3.兄弟组件通讯

  由上可知,父子组件通讯都会有一个媒介,相当于一个传递信息的介质,才可以使得数据传递过去。兄弟组件通讯业需要一个介质,我们通常称之为事件线~

1.创建一个组件  名字:eventBus(随便起) 我放在了src/asstest/eventBus/index.js文件夹下

1 import Vue from ‘vue‘
2 export default new Vue()

2.创建第一个兄弟组件,名字:Emit

 1 <template lang="pug">
 2   .emit
 3     .box Emit组件a
 4     button(@click=‘show‘) 向on组件传值
 5 </template>
 6
 7 <script>
 8 import bus from ‘../assets/eventBus‘
 9 export default {
10   methods: {
11     show () {
12       bus.$emit(‘user‘, ‘haha‘)
13     }
14   }
15 }
16 </script>

3.创建第二个兄弟组件,名字:On

 1 <template lang="pug">
 2   .on
 3     .cont 接受emit组件的数据:{{msg}}
 4 </template>
 5
 6 <script>
 7 import bus from ‘../assets/eventBus‘
 8 export default {
 9   data () {
10     return {
11       msg: ‘on‘
12     }
13   },
14   mounted () {
15     let self = this
16     bus.$on(‘user‘, (msg) => {
17       self.msg = msg
18     })
19   }
20 }
21 </script>

  在vue中常用的传值方式也就是这三种,但方放不局限于这三种。希望喜欢我的小伙伴们继续支持我。

  

  

原文地址:https://www.cnblogs.com/alongup/p/9255388.html

时间: 2024-10-03 22:22:04

Vue组件通讯的相关文章

Vue最常用的组件通讯有三种:父-&gt;子组件通讯、子-&gt;父组件通讯,兄弟组件通讯.(template用的pug模板语法)

Vue最常用的组件通讯有三种:父->子组件通讯.子->父组件通讯,兄弟组件通讯.(template用的pug模板语法) 1.父->子组件通讯 父->子组件通讯,是通过props进行数据传递,并且具有这几个特性,单向传递,子组件接收的数据不可以更改,如果更改,会发出警告,每次父组件更新时,子组件的所有 prop 都会更新为最新值. 1 父组件 2 <template lang="pug"> 3 .father 4 Children(:name='msg

vue的组件通讯 父传子 -- 子传父-- 兄弟组件的传值 vue的组件传值

首先文字简单撸一下 父子传子   -------首先在父组件上绑定一个属性,在子组件里用props接收,可以是数组或者是对象 子传父   ------在父组件升上自定义一个方法,在子组件里通过this.$emit("父组件上的方法名",a)     /-------a------/代表需要传递的参数        兄弟组件通讯   需要创建一个公共的vue 实例, new vue()    在main.js里 书写Vue.prototype .com=new vue()    通过pr

vue2.0中eventBus实现兄弟组件通讯

我们知道,在vue中父子组件的通讯是通过props和自定义事件搞定的,简单那的非父子组件通讯用bus(一个空的Vue实例),针对中大型的项目会选择vuex,然而小项目的话,便捷的解决方案就是eventBus. 官网相关描述在:$dispatch和$broadcast替换  一节中.提到: $dispatch 和 $broadcast 也没有解决兄弟组件间的通信问题.对于$dispatch 和 $broadcast最简单的升级方式就是:通过使用事件中心,允许组件自由交流,无论组件处于组件树的哪一层

路由与组件通讯

路由的钩子:(即导航守卫) 1.全局的, const router = new VueRouter({ ... }) router.beforeEach((to, from, next) => { // ... }) 2.单个路由独享的 const router = new VueRouter({ routes: [ { path: '/foo', component: Foo, beforeEnter: (to, from, next) => { // ... } } ] }) 3.组件级的

Vue 组件通信

今天学习了,vue组件通信本篇随笔主要对今天的学习成果进行总结.有什么不对的地方还望谅解! 首先,Vue的核心即组件化开发,所以组件通信就显得十分重要. 组件通讯包括:父子组件间的通信和兄弟组件间的通信. 1.子组件获取父组件中数据间: var Child={ template:"#child", props:['mes'], data:function(){ return { data:this.$props.mes, //调用该子组件 props 中的对应属性的属性值: } } 通

vue组件间通信六种方式(完整版)

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

来吧!一文彻底搞定Vue组件!

作者 | Jeskson 来源 | 达达前端小酒馆 Vue组件的概述 组件是什么呢,了解组件对象的分析,Vue组件中的data属性,props传递数据的原理到底是什么. 事件通信的那些事 如何了解父子组件事件通信,和遇到非父子组件事件通信如何处理. 组件类型又是什么鬼 自定义组件双向绑定v-model,动态组件,又是如何称为动态的,为啥是动态呢,递归组件,如何理解递归. Vue组件的了解 Vue的理解,可以找我上一篇vue.js-详解三大流行框架VUE_快速进阶前端大咖-Vue基础,组件是什么,

Vue组件通信模式

概述 在Vue.js中,有几种我们能用的内部组件通信的方法.一般的属性和事件对于大多数场景来说已经够用了,但是除此之外,还有其他可用的方法. 属性和事件 当然,一般的通信方法用到了属性和事件.这种常用的模式是组件中一种强大的通信方式,它不用在相关的组件上引入任何依赖和限制. 属性 属性允许你传递任意的数据类型到一个子组件中,并且允许你控制组件接收何种类型的数据.属性的更新也是响应式的,这使得无论任何时候,父组件的数据改变,子组件就会更新. 模板用法: 123 <my-component v-bi

关于vue组件的一个小结

用vue进行开发到目前为止也有将近一年的时间了,在项目技术选型的时候隔壁组选 react的时候我们坚持使用vue作为前端的开发框架.虽然两者思想上的差异不大,但是vue的语法在代码的可读性以及后期的维护成本更加的适合,而且最近看到Apache对react的相关许可限制:这里不讨论react和vue的对比哪个好,技术框架没有最好的,只有适合项目才是最好的. 进入主题....... 组件,是vue的核心之一. 我们可以把页面各个子模块看成一个组件,可以独立拆分出来.这样不仅维护变得简单了,而且代码复