Vue组件间通信的8种方式

1.常用的父子组件通讯方式:props,emit

父组件传入属性,子组件通过props来接收,在子组件中就可以用this.xxx方式使用。

子组件通过$emit(事件名,参数)向外弹出一个自定义事件,在父组件中的属性监听事件,可以获得子组件中传出来的值

//	父组件
<hello-world msg="hello world!" @confirm="handleConfirm"><hello-world>
//	子组件
 props: {
    msg: {
      type: String,
      default: ''
    }
  },
  methods:{
  	handleEmitParent(){
  		this.$emit('confirm', list)
  	}
  }

2.$parent,$children

通过 $parent,$children 来访问组件实例,进而去获取 或者 改变父子组件的值。 (仅限于父子组件之间,不推荐使用,因为不利于维护,一旦组件层次发生了变化,就需要更改其中的层次关系)

需要注意边界,最外层的#app 的$parent得到的是Vue实例,在Vue实例上再去取$parent 就是undefined了。 在最底层的组件中 $children是[]。

3.$ref

通过引用的方式获取子节点,常用于父组件中调用子组件的方法或者获取子组件的属性。

注意:如果绑在的是v-for的节点上,那么获取到的是一个数组。

4.provide/inject

依赖注入,常见于插件或者组件库里。

多个组件嵌套时,顶层组件provide提供变量,后代组件都可以通过inject来注入变量。

缺陷:传递的数据不是响应式的,inject接收到数据后,provide中的数据改变,但是后代组件中的数据不会改变。所以 建议传一些常量或者方法。

5.EventBus 事件总线 (任意两个组件通讯)

用 $emit去监听,用$on去触发,注意需要$off来取消监听,否则可能会造成内存泄漏。

6.$attrs、$listener

适用于多级组件嵌套,但是不做中间处理的情况。比如祖先组件向孙子组件传递数据。

$attrs 可以获取父组件传进来,但是没有用props接收的属性。

可以通过v-bind="$attrs"传入内部组件。

搭配inheritAttrs使用,这个只是用来控制attrs是否在DOM中渲染。

$listeners 包含父作用域中的(不包含.native的) v-on时间监听器。

可以通过v-on="$listeners"来传入内部组件。

7.Vuex 状态管理器

集中式存储管理所有组件的状态。

可以解决 多个视图依赖同一个状态 或者是 来自不同视图的行为需要变更同一个状态 的问题。

8.localStorage/sessionStorage

持久化存储。

  • 21
    点赞
  • 147
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一流行的JavaScript框架,它允许您轻松地构建可重用的组件Vue组件是一个独立的功能部件,它可以通过不同的方式进行通信,以实现更好的交互和协作。以下是Vue中六常用的组件间通信方式: 1. Props Props是一用于从父组件向子组件传递数据的机制。父组件可以将数据作为属性传递给子组件,并且子组件可以通过props属性来使用这些数据。 2. Events Events是一Vue组件间通信的双向机制,它允许子组件通过触发事件来向父组件发送消息。父组件可以监听这些事件,并根据需要作出响应。 3. Provide / Inject Provide / Inject是一用于跨嵌套组件之间共享数据的机制。父组件可以通过provide属性将数据传递给子组件,然后子组件可以通过inject属性来访问这些数据。 4. Vuex Vuex是一Vue状态管理器,它允许您在单个应用程序中管理共享状态Vuex包含一个中央状态存储库,可以跨组件访问和修改状态,以实现更好的协作和交互。 5. ref 属性 Ref是一用于访问组件实例的方法,它可以通过设置ref属性来指定组件的名称。然后你就可以通过$refs属性来访问该组件实例,并在组件之间进行通信。 6. $emit 和 $on $emit和$on是Vue的内置事件机制,它允许组件之间进行通信。$emit用于触发事件,而$on则用于监听事件。使用这方式,您可以轻松地在组件之间传递消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值