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

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

  本文主要介绍Vue组件通信方法的案例总结。本文通过一个简单的案例来说明对这项技术的理解和使用。以下是详细内容,有需要的朋友可以参考一下。

  :

目录

   1.父组件将值转移到子组件(props) 2。子组件将值传递给父组件($emit) 3。姐妹组件传输值(EventBus)1。初始化(newVue())2。发送事件($emit())3。接收事件($on())4

  

一、父组件向子组件传值(props)

  步骤:

  在父组件中,数据通过v-bind传递给子组件。

  在子组件中,父组件传递的数据是通过props接收的。

  div id=应用程序

  !-1.通过v-bind将数据传递给子组件

  测试v-bind:ss=name/test

  /div

  脚本

  var a=新Vue({

  埃尔: #app ,

  数据:{

  姓名:冰,

  },

  组件:{

  测试:{

  道具:[ss],//2。接收父组件传递的数据。

  模板:“p{{ss}}/p”

  }

  }

  })

  /脚本

  道具使父子之间产生了单向数据流。当父元素更新时,子元素的状态也会改变。

  反而会让你的应用的数据流难以理解,所以在子组件中不能修改父组件中的数据之间。

  

二、子组件向父组件传值($emit)

  子组件通过$emit事件向父组件发送消息,并将自己的数据传递给父组件。

  步骤:

  在子组件上绑定一个click事件来触发increment方法。

  在increment方法中,用$emit定义一个自定义事件增量,并传入this.counter参数。

  将步骤2中自定义的增量事件绑定到父组件上。该方法称为incrementTotal。

  在父组件中调用步骤3中的incrementTotal方法,然后incrementTotal方法可以接收子组件传入的参数。

  div id=应用程序

  p{{ total }}/p

  按钮计数器v-on:increment= increment total /按钮计数器!第三步

  /div

  脚本

  Vue.component(按钮计数器,{

  template: button v-on:click= increment { { counter } }/button ,//步骤1

  数据:函数(){

  返回{

  计数器:“子组件数据”

  }

  },

  方法:{

  增量:函数(){

  这个。$emit(increment ,this . counter);//第二步

  }

  }

  });

  新Vue({

  埃尔: #app ,

  数据:{

  总计:父组件的数据:

  },

  方法:{

  IncrementTotal:函数(e) {//步骤4

  this.total=this.total e[0]

  console . log(e);

  }

  }

  })

  /脚本

  

三、兄弟组件传值(EventBus)

  如果不需要Vuex这样的库来处理组件之间的数据通信,可以考虑Vue中的事件总线(EventBus)来进行通信。

  在Vue中,EventBus可以作为通信桥的概念,就像所有组件共享同一个事件中心,可以注册发送或接收事件,所以所有组件可以上下并行通知其他组件。

  但是,它太方便了,所以如果使用不慎,就会造成难以维持的“灾难”。所以需要更完善的Vuex作为状态管理中心,将通知的概念上升到共享状态的层面。

  这种方法是创建一个空的vue实例,作为$emit事件的处理中心(事件总线),通过它触发和监控事件,从而方便地实现任意组件之间的通信,包括父、子、兄、隔代组件。如下所示:

  

1. 初始化(new Vue())

  首先,您需要创建事件总线并将其导出,以便其他模块可以使用或监听它。

  我们可以用两种方法来处理它。

  方法一:创建新的event-bus.js文件

  //event-bus.js

  从“vue”导入Vue

  export const EventBus=new Vue()

  方法二:直接在项目的main.js中初始化EventBus

  //main.js

  vue . prototype . $ EventBus=new vue()//注意:这样初始化的event bus是一个全局事件总线。

  现在我们已经创建了EventBus,接下来你需要做的就是把它加载到你的组件中,调用同样的方法,就像你在父子组件中互相传递消息一样。

  

2. 发送事件($emit())

  假设有两个Vue页面需要通信:A和b,A页面将一个click事件绑定到按钮,发送消息通知b页面。

  !- A.vue -

  模板

  button @ click= sendMsg()-/button

  /模板

  脚本

  从导入{ EventBus }./event-bus . js ;

  导出默认值{

  方法:{

  sendMsg() {

  事件。$ emit (AMSG ,来自A页的消息);//向外界发送数据

  }

  }

  };

  /脚本

  

3. 接收事件($on())

  接下来,你需要在B页收到这条消息。

  !- B.vue -

  模板

  p{{msg}}/p

  /模板

  脚本

  从导入{ EventBus }./event-bus . js ;

  导出默认值{

  data() {

  返回{

  邮件:“”

  }

  },

  已安装(){

  事件。$ on (amsg ,(msg)={//接收a发送的消息。

  this.msg=msg

  });

  }

  };

  /脚本

  

4. 移除事件监听者

  如前所述,如果使用不当,EventBus将是一场灾难。是什么样的“灾难”?大家都知道vue是单页应用。如果刷新某个页面,相关的EventBus会被移除,导致业务失败。即使业务有重复操作的页面,EventBus在监听时也会多次触发,这也是一个非常大的隐患。这时候就需要妥善处理好EventBus和项目的关系。通常,当vue页面被销毁时,EventBus事件监控也同时被移除。

  如果您想删除对事件的监控,您可以按如下方式进行:

  从导入{ EventBus }./event-bus . js ;

  EventBus。$off(aMsg ,{})

  EventBus。$off(aMsg )删除应用程序中对此事件的所有监视。

  或者直接调用EventBus。$off()移除所有事件通道,而不添加任何参数。

  

四、Vuex

  在做中大型单页面应用的时候,比如多人协同开发,全局维护登录状态,我们最好选择vuex进行状态管理。

  Vuex详细解释门户

  本文关于Vue组件通信方法的案例总结到此为止。关于Vue组件通信方法的更多总结内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: