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

  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/ajaxlu/p/9728098.html

时间: 2024-10-11 00:03:26

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

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

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

Vue父组件向子组件传递一个动态的值,子组件如何保持实时更新实时更新?

原文:https://blog.csdn.net/zhouweixue_vivi/article/details/78550738 2017年11月16日 14:22:50 zhouweixue_vivi 阅读数:29918 最近用vue做一个新项目,经历了各种折磨,每次遇到问题都想大喊,格劳资上JQuery,氮素肯定是不行的,今天遇到一个小问题,Vue父组件向子组件传递一个动态的值,子组件只能获取初始值,不能实时更新? 这就有点折磨人了,设想的是,父组件发生变化获取数据,动态传递给子组件,子组

组件之间的通讯:兄弟组件之间的相互通讯(中央事件总线)

组件之间的通讯: 父->子:通过props,data属性, 子->父:通过派发事件 兄弟组件:中央事件总线(......data{ Bus:new Vue()}.....) 更为复杂的通讯:就是用vuex 关于兄弟组件之间的通讯官档上推荐使用中央事件总线,我们也确实是这样做的, 中央事件总线,其实就是在父组件data中在实例化话一个vue实例,用于管理组件之间的通讯 假设我们有一个组件A,和B,他们之间的要进行数据通讯,那么他们之间肯定要建立某种联系,这个联系人就是父组件,联系地址就是中央事件

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

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

vue的$emit 与$on父子组件与兄弟组件的之间通信

本文主要对vue 用$emit 与 $on 来进行组件之间的数据传输. 主要的传输方式有三种: 1.父组件到子组件通信 2.子组件到父组件的通信 3.兄弟组件之间的通信 一.父组件传值给子组件 父组件给子组件传子,使用props //父组件:parent.vue <template> <div> <child :vals = "msg"></child> </div> </template> <script&

Vue的常用语法

Vue的介绍 官网教程:https://cn.vuejs.org/v2/guide/installation.html 掘金:https://juejin.im/ cdn(在线的网络连接资源):https://www.bootcdn.cn/ 1,Vue的简介 Vue (读音 /vju?/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层(指的是前端页面,即MTV中的T—>template模板). 2

vue兄弟组件的传值eventbus

注:当在a.vue组件上触发点击事件时,就会触发bus上监听的事件,而bus事件监听在b.vue里面,这个时候就会触发b.vue 上的事件监听,而通过回调函数,就可以拿到a.vue组件传过来的数据,从而实现兄弟组件通信. ###~~bus.js import Vue from "vue" export default new Vue()parent.vue父组件 <template> <div id="app"> <avue>&l

Vue的常用特性

Vue的常用特性 一.表单基本操作 都是通过v-model 单选框 1. 两个单选框需要同时通过v-model 双向绑定 一个值 2. 每一个单选框必须要有value属性 且value值不能一样 3. 当某一个单选框选中的时候 v-model 会将当前的 value值 改变 data 中的 数据 gender 的值就是选中的值,我们只需要实时监控他的值就可以了 <input type="radio" id="male" value="1"

vue父子组件、兄弟组件之间的通信和访问

注意:比较复杂的嵌套类的通信问题都建议使用vuex 一.父组件->子组件 (1)直接关系: 1. 属性传值(props) 2. $children(数组) 3. $refs (2)跨多层关系: 1. provide / inject 二.子组件->父组件 (1)直接关系: 1. 事件传值 2. $parent (2)跨多层关系: 1. 暂无 三.兄弟组件 (1)使用事件中心,实例化一个空的 Vue 实例(建议使用vuex) 原文地址:https://www.cnblogs.com/zhangr