zoukankan      html  css  js  c++  java
  • vue.js 兄弟组件传值

    另:  在vue里,组件之间的作用域是独立的,父组件跟子组件之间的通讯可以通过prop属性来传参,但是在兄弟组件之间通讯就比较麻烦了,虽然可以使用事件监听的方式,但还是不如vuex专业。比如A组件要告诉一件事给B组件,那么A就要先告诉他们的爸组件,然后爸组件再告诉B。当组件比较多,要互相通讯的事情很多的话,爸组件要管他们那么多事,很累的。vuex正是为了解决这个问题,让多个子组件之间可以方便的通讯。

    事件监听的方式的通信示例:

    1、兄弟之间传递数据需要借助于事件车,通过事件车的方式传递数据

    2、创建一个Vue的实例,让各个兄弟共用同一个事件机制。

    3、传递数据方,通过一个事件触发bus.$emit(方法名,传递的数据)。

    4、接收数据方,通过mounted(){}触发bus.$on(方法名,function(接收数据的参数){用该组件的数据接收传递过来的数据}),此时函数中的this已经发生了改变,可以使用箭头函数。

    实例如下:

    我们可以创建一个单独的js文件eventVue.js,内容如下:

    import Vue from 'vue'
    
    export default new Vue

    假如父组件如下:

    <template>
         <components-a></components-a>
         <components-b></components-b>
    </template>

    子组件a如下:

    复制代码
    <template>
          <div class="components-a">
               <button @click="abtn">A按钮</button>
          </div>
    </template>
    <script>
    import eventVue from '../../js/event.js'
    export default {
          name: 'app',
          data () {
            return {
                    ‘msg':"我是组件A"
            }
          },
          methods:{
               abtn:function(){
                       eventVue .$emit("myFun",this.msg)   //$emit这个方法会触发一个事件
               }
          }
    }
    </script>
    复制代码

    子组件b如下:

    复制代码
    <template>
         <div class="components-a">
             <div>{{btext}}</div>
         </div>
    </template>
    <script>
    import eventVue from '../../js/event.js'
    export default {
       name: 'app',
       data () {
            return {
               'btext':"我是B组件内容"
            }
       },
       created:function(){
           this.bbtn();
       },
       methods:{
           bbtn:function(){
                eventVue .$on("myFun",(message)=>{   //这里最好用箭头函数,不然this指向有问题
                     this.btext = message      
                })
           }
        }
    }
    </script>
    复制代码

    这样在子组件a里面点击函数就可以改变兄弟组件b里面的值了。

     
  • 相关阅读:
    Mysql数学函数不求人数据库专栏,MySQL
    下班以后就不要开电脑了,
    在ubuntu下用eclipsecdt调试memcached C language ITeye论坛
    mperham/sidekiq
    Reference C++ Reference
    请问一下哪有机械键盘的实体店可以体验一下? 外设 Chiphell 分享与交流用户体验的最佳平台 Powered by Discuz!
    Linux的cron和crontab iTech 博客园
    MIUI官方论坛 发烧友必刷的Android ROM
    机器学习视频
    crossover 海客谈, 季小军, 义乌人
  • 原文地址:https://www.cnblogs.com/welhzh/p/9884604.html
Copyright © 2011-2022 走看看