Vue 知识点汇总——组件间的通信

 组件间的通信:

     1. 父组件 =》子组件:  

          (1).属性props

               child:   props:{ msg: String}

                parent:   <HelloWorld msg="Welcome to my summary"/>

          (2).特性 $attrs

               child:  // 并未在props中申明 foo       <p>{{$attrs.foo}}</p>                   此时渲染结果为 <p>foo</p>

               parent: <HelloWorld  foo="foo" />

          (3).引用refs

                parent:  <HelloWorld ref="hw"/>                mounted() {this.$refs.hw.xx="xxxxx"}

                child: <p>{{xx}}</p>      data(){ return {xx: 'xxxxxxxx'} }

      2. 子组件 =》 父组件:    //  事件谁派发,谁监听

              // child:   this.$emit('add', good);

              // parent:  <Cart  @add="cartAdd($event)" ></Cart>

       3.  兄弟组件:通过共同父辈组件

            通过共同的祖辈组件搭桥,$parent或$root

            // brother1     this.$parent.$on('foo', handle)

            // brother2    this.$parent.$emit('foo')

       4.  祖先和后代之前

              由于嵌套层数过多,传递props不切实际,vue提供了provide/inject API完成该任务

              provide/inject: 能够实现祖先给后代传值

              // ancestor     provide() { return {foo: 'foo'} }

              // descendant    inject:['foo']

        5.  任意两个组件之间: 事件总线或 vuex

             事件总线: 创建一个Bus 类负责事件派发、监听和回调管理

              // Bus: 事件派发、监听和回调管理

             class Bus{

                   constructor() {  this.callbacks = {} }

                   $on(name, fn){

                          this.callbacks[name] = this.callbacks[name] || [ ]

                          this.callbacks[name].push(fn)

                   }

                   $emit(name,  args) {

                          if(this.callbacks[name]) { this.callbacks[ name ].forEach( cb => cb(args) )}

                   }

             } 

             // main.js 

             Vue.prototype.$bus = new Bus()

             // child1      this.$bus.$on('foo', handle)

             // child2       this.$bus.$emit('foo')

            vuex: 创建唯一的全局数据管理者store,通过它管理数据并通知组件状态变更

 

 

      

                

                    

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值