1.props(数据双向绑定,props,可祖传父,父传子能隔代)

将组件中需要传递的东西交给共同的父亲,父亲再将数据交给其中一个儿子,这个过程通过props的方法传递,让son2接收 props['xxx'],此时接收的数据出现在son2的实例对象vc身上,所以模板可以使用。

此时son1要获得数据1,father就要提前创造一个函数传递给son1,然后son1调用函数。此时就可以定义在father中的函数,进行操作,这就意味着只要son1调用函数,vue就会重新解析模板,然后更新数值。

总结:借用父亲创造函数,子组件调用函数并且传参传到父亲创造的函数中

结合todolist案例

<MyFooter :todos="todos" :checkAllTodo=" checkAllTodo" :clearAllTodo="clearAllTodo"/>

props:['todos','checkAllTodo','clearAllTodo'],methods: {checkAll(e){this.checkAllTodo(e.target.checked)},deleteAll(value){this.deleteAllTodo(value)}},

2.自定义事件法(v-on/ref,父传子,不能隔代,不用props接收)

1.自定义事件法是组件之间的一种通信方式,适用于子组件传递给父组件。

2. 使用场景:A是父组件,B是子组件,B想给A传数据,那么就要在A中给B绑定自定义事件(事件的回调在A中)。

3. 绑定自定义事件:

方式一,在父组件中:

<Demo @hello="test"/>或 <Demo v-on:hello="test"/>

方式二,在父组件中:

......    js
        <Demo ref="demo"/>
        ......
        mounted(){
           this.$refs.xxx.$on('hello',this.test)
        }

若想让自定义事件只能触发一次,可以使用once修饰符,或$once方法

4. 触发自定义事件:this.$emit('hello',数据)

5. 解绑自定义事件:this.$off('hello')

6. 组件上也可以绑定原生DOM事件,需要使用```native```修饰符。

7. 注意:通过 this.$refs.xxx.$on('hello',回调)绑定自定义事件时,回调要么配置在methods中要么用箭头函数,否则this指向会出问题!

结合todolist案例

原来App中传递给MyHeader以及MyFooter使用函数传递的地方就可以更改为利用自定义事件去修改.原来使用props接收函数的地方就可以去掉,但是传递数据的地方不能去掉。

将数据双向绑定改为@,调用函数的地方使用$emit

<MyFooter :todos="todos" @checkAllTodo="checkAllTodo" @deleteAllTodo="deleteAllTodo"/>
 methods: {checkAll(e){this.$emit("checkAllTodo",e.target.checked)},deleteAll(value){this.$emit("deleteAllTodo",value)}},

3.全局事件总线(GlobalEventBus)

找出一个公用的都能获取数据的地方,也就是vue。

1. 一种组件间通信的方式,适用于任意组件间通信。

2. 安装全局事件总线:

在main.js中安装

```js
   new Vue({
       ......
       beforeCreate() {
           Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm
       },
       ......
   }) 
   ```

3. 使用事件总线:

(1). 接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的 回调留在A组件自身。

```js
      methods(){
        demo(data){......}
      }
      ......
      mounted() {
        this.$bus.$on('xxxx',this.demo)
      }
      ```

(2). 提供数据 :this.$bus.$emit('xxxx',数据)

4. 最好在beforeDestroy钩子中,用$off去解绑当前组件所用到的事件。

-----提供数据的组件

   export default {name:'Student',data(){return{name:'张三',sex:'男',}}, methods:{sendStudentName(){this.$bus.$emit('hello',this.name)}}
}

-----接收数据的组件

 mounted(){// console.log("School",this.x);this.$bus.$on('hello',(data)=>{console.log('我是school组件,收到了数据',data);})},beforeDestroy(){this.$bus.$off('hello')}

4.消息订阅与发布(任意组件之间)

1.   一种组件间通信的方式,适用于任意组件间通信

2. 使用步骤:

(1)安装pubsub:npm i pubsub-js

(2) 引入: import pubsub from 'pubsub-js

(3)接收数据:A组件想接收数据,则在A组件中订阅消息,订阅的回调留在A组件自身。

```js

methods(){

demo(data){......}

}

......

mounted() {

this.pid = pubsub.subscribe('xxx',this.demo) //订阅消息

}

```

4. 提供数据:pubsub.publish('xxx',数据)

5. 最好在beforeDestroy钩子中,用 PubSub.unsubscribe(pid)去取消订阅。

组件之间数据信息传递方法相关推荐

  1. vue组件之间数据的传递 - 父传子详解

    简单一点, 把根组件作为父组件. 1.1.1. 父子之间不能正常共享数据的 1.1.2. 父组件把数据传递给子组件: 步骤 步骤: 1.1.2.1. 在父组件中,正常定义自己的数据. 1.1.2.2. ...

  2. vue组件之间数据传递和通信方式总结

    vue组件之间数据传递和通信方式总结 方式主要包括: 父组件=>子组件 | 单向数据流,props 子组件=>父组件 | 观察者模式,即vue的自定义事件 $emit 和 $on 非父子组 ...

  3. VC++开发学习三(对话框之间的信息传递的方法总结)

    以模态对话框为例进行不同对话框之间的信息传递 这里主要是通过主对话框的编辑框,输入信息,然后传递给模态对话框的编辑框同时在模态对话框取消或者确定时向主对话框的编辑框中显示信息,几种方法都是这样的例子. ...

  4. react组件之间传递信息/react组件之间值的传递

    react组件之间传递信息/react组件之间值的传递 首先咱们先来了解一下,数据是怎么进行相互间传递的; api和组件的区别:一个是逻辑层的方法函数,一个是表现层的组件(方法函数). api是一组预 ...

  5. Vue第二天学习总结—— Vue全家桶之组件化开发(组件化开发思想、组件注册、Vue调试工具用法、组件间数据交互传递、组件插槽、基于组件的案例——购物车)

    (一) 组件化开发思想 1. 现实中的组件化思想体现 组件化即是对某些可以进行复用的功能进行封装的标准化工作 标准:要想组件能够成功组合在一起,每个组件必须要有标准 分治:将不同的功能封装到不同的组件 ...

  6. fragment与activity之间的信息传递的两种方式

    因为Fragment和Activity一样是具有生命周期,不是一般的bean通过构造函数传值,会造成异常. fragment与activity之间的信息传递的两种方式: 1.第一种方式,也是最常用的方 ...

  7. must implement OnFragmentInteractionListener/ Fragment与Activity,Fragment与Fragment之间的信息传递

    出现这个问题的原因, 是Fragment关联的Activity没有实现OnFragmentInteractionListener接口. 那为什么要实现这个接口,以及怎样实现这个接口呢?让我们一步一步来 ...

  8. 020_Vue非父子组件之间数据交互

    1. 非父子组件之间数据交互 1.1. 单独的事件中心管理组件间的通信 var eventHub = new Vue(); 1.2. 监听事件 eventHub.$on('event-name', f ...

  9. mysql 表关系传递,mysql数据表之间数据相互传递的问题

    mysql数据表之间数据相互传递的问题 近日,某操作需要从一个表(表A)读取一些数据,然后直接写入另外一个表(表B)(相当于一个备份) 平时没啥问题,某天测试MM将一些乱七八糟的数据写入后就出问题了, ...

最新文章

  1. Android SlidingMenu 开源项目 侧拉菜单的使用(详细配置)
  2. js除法与C语言除法,JS算术运算符及用法
  3. Flex读取XML配置文件
  4. Html图片懒加载动画,Intersection Observer实现滚动到相应区域执行动画及图片懒加载...
  5. Java解析Rss(三)
  6. Ubuntu Sudo 无法解析的主机
  7. 小米手机硬改技术_小米11手机爆料:首发骁龙875 或采用屏下摄像头技术
  8. 漫步微积分三十——定积分的性质
  9. java json 工具类_Java中JSON处理工具类使用详解
  10. java final修改器_Java中的“ final”关键字如何工作?(我仍然可以修改对象。)...
  11. java替换最后一个字符_Excel公式技巧23: 同时定位字符串中的第一个和最后一个数字...
  12. 计算机网络复习-互联网概述
  13. G1垃圾回收器总结一
  14. 关于分行数字化转型工作的几点思考
  15. matlab求线与面的夹角,基于MATLAB的通用晶面间夹角公式的推导与求解
  16. oracle自定义异常长度,Oracle自定义异常收集(二)
  17. 在《寒门状元之死》上,咪蒙贩卖的是什么?
  18. 基于docker的test-containers环境百宝箱
  19. PPT学习笔记,相关好用软件吐血推荐
  20. Android面试题,framework源码

热门文章

  1. 池州学院期末计算机考试题,池州学院数据库期末模拟试卷1..doc
  2. SQL Server中遇到的(1行受影响)
  3. 虚拟机安装Linux系统的详细过程
  4. 2021年JavaScript实用手册
  5. html 中引入外部 css 、js 文件
  6. ElasticSearch1-官方文档翻译(概念,搜索,聚合篇)
  7. 决定入驻这个优秀的平台。
  8. 计算机cad理论试题,2017年cad考试试题「含答案」
  9. 【无需服务器】工具箱组合微信带流量主超多功能小程序源码
  10. A~Z--2019年IT圈哪件事让你印象最深