Vue 组件间通信的几种方式?

简介: 5种方式

在Vue中,存在多种方式来实现组件之间的通信,下面是几种常见的方式:

  1. Props/Events:父组件通过props向子组件传递数据,子组件通过触发事件将数据传递给父组件。

    • 父组件向子组件传递数据:
      <child-component :prop-name="data"></child-component>
      
    • 子组件接收父组件传递的数据:
      Vue.component('child-component', {
             
        props: ['propName'],
        // ...
      });
      
    • 子组件向父组件传递数据:
      this.$emit('event-name', data);
      
  2. 自定义事件:通过使用Vue实例的$on`和`$emit方法在任意组件间进行事件通信。

    • 监听事件:
      this.$on('event-name', handler);
      
    • 触发事件:
      this.$emit('event-name', data);
      
  3. EventBus:使用Vue的事件总线来实现组件之间的通信。可以通过创建一个全局的Vue实例并在组件间共享来实现事件的订阅和发布。

    • 创建事件总线实例:
      Vue.prototype.$bus = new Vue();
      
    • 在组件中订阅事件:
      this.{
             mathJaxContainer[1]}on('event-name', handler);
      
    • 在组件中发布事件:
      this.{
             mathJaxContainer[2]}emit('event-name', data);
      
  4. Vuex:适用于更大型应用的状态管理模式,通过创建一个全局的状态管理仓库来实现组件之间的通信。

    • 在state中定义状态:
      state: {
             
        data: null
      }
      
    • 在组件中获取和修改状态:
      // 获取状态
      this.$store.state.data
      // 修改状态
      this.$store.commit('mutation-name', data);
      
    • 在组件中提交mutation:
      this.$store.commit('mutation-name', data);
      
  5. $refs:使用ref属性来获取子组件的引用,并直接调用子组件的方法或访问子组件的属性。

    • 在组件上添加ref:
      <child-component ref="childRef"></child-component>
      
    • 在父组件中使用ref:
      this.$refs.childRef.methodName();
      

这些方法可以根据应用的需求来选择适合的方式。对于简单的父子组件间通信,可以使用props和events;如果组件之间的通信比较复杂,可以考虑使用事件总线或Vuex来管理状态;而对于简单的组件引用和调用,可以使用$refs。

相关文章
|
1天前
|
JavaScript
Vue实战-组件通信
Vue实战-组件通信
4 0
|
1天前
|
JavaScript
Vue实战-将通用组件注册为全局组件
Vue实战-将通用组件注册为全局组件
5 0
|
1天前
|
JavaScript 前端开发
vue的论坛管理模块-文章评论02
vue的论坛管理模块-文章评论02
|
1天前
|
JavaScript Java
vue的论坛管理模块-文章查看-01
vue的论坛管理模块-文章查看-01
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
987 0
|
1天前
|
JavaScript
vue页面加载时同时请求两个接口
vue页面加载时同时请求两个接口
|
1天前
|
JavaScript
vue里样式不起作用的方法,可以通过deep穿透的方式
vue里样式不起作用的方法,可以通过deep穿透的方式
|
1天前
|
移动开发 JavaScript 应用服务中间件
vue打包部署问题
Vue项目`vue.config.js`中,`publicPath`设定为&quot;/h5/party/pc/&quot;,在线环境基于打包后的`dist`目录,而非Linux的`/root`。Nginx代理配置位于`/usr/local/nginx/nginx-1.13.7/conf`,包含两个相关配置图。
vue打包部署问题
|
1天前
|
JavaScript 前端开发
iconfont 图标在vue里的使用
iconfont 图标在vue里的使用
11 0
|
1天前
|
资源调度 JavaScript 前端开发
vue 项目运行过程中出现错误的问题解决
vue 项目运行过程中出现错误的问题解决