Skip to content

一、vue-组件传值方式-非父子组件传值方式

1. 非父子组件传值-方式一【事件总线】

场景: 58418531.png

事件总线

  • 步骤一:建立一个公共的js文件,专门用来传递消息。
// bus.js
import Vue from 'vue'
export default new Vue;
  • 步骤二:在需要传递消息的地方
// 在需要传递消息的地方引入
import bus from './bus.js'
// 传递消息
bus.$emit('msg', val)

具体代码举例: 51936679.png

  • 步骤二:在需要接受消息的地方
// 在需要接受消息的地方引入
import bus from './bus.js'
// 接受消息
bus.$on('msg', (data) => {
    console.log(data);
})

具体代码举例: 52110336.png

2. 非父子组件传值-方式二【$attrs/listeners】

// 解决多级组件间传值的问题
// $attr 将父组件中不包含props的属性传入子组件,通常配合interitAttrs选项一起使用
// $listeners 监听子组件中数据变化

$attrs

  • 最外层组件统一传值
  • 接受值的组件的父组件引用子组件的地方需要绑定v-bind="$attrs"
  • 接受组件中使用this.$attrs 获取参数。 举例: 场景 58702882.png 代码实现: A组件: 62977433.png B组件: 63065639.png C组件: 63103411.png 效果: 63133634.png

$listeners

  • 最外层组件监听子组件触发的事件
  • 子组件的父组件使用v-on="$listeners"绑定监听
  • 子组件使用this.$emit("事件名"),触发事件 场景: 63248961.pngC组件: 65160935.png B组件: 65222140.png A组件 66277721.png

参考: https://blog.csdn.net/songxiugongwang/article/details/84001967

3. 非父子组件传值-方式三【vuex】

还有一种场景如下:OtherFather组件向Son组件传值,除了使用事件总线的方式,还可以使用vuex 场景: 78015165.png 构造Store: 78149130.png OtherFather组件: 78302059.png Son组件:

  • 写法一 78345335.png
  • 写法二 38528702.png 最后vuex还有很多用法,这边只是最为基础的,希望道友们自行深究。

Released under the MIT License.