咨询电话:
15628812133
20
2023/04

组件间传值的常用方法

发布时间:2023-04-20 08:33:15
发布者:锤子和镰刀
浏览量:
0

1. 最常用,最经典,props传值--父传子

Props传值适用于父组件传递数据给子组件,父组件在使用子组件的标签中通过字面量来传值,子组件中使用props来定义接收父组件传递过来的参数

接下来我们来看一个例子,这里我封装了elementUI的列表项,在父组件中的子组件标签中设置了一些参数,并在子组件中规定预期类型的构造函数。

其中,我在父组件中的fixed的值虽然是true是一个静态的值,但我们还是需要v-bind来进行绑定,因为这是一个js表达式,而不是字符串。

所有的 props 都遵循着单向绑定原则,props 因父组件的更新而变化,自然地将新的状态向下流往子组件,而不会逆向传递。这避免了子组件意外修改父组件的状态的情况,不然应用的数据流将很容易变得混乱而难以理解。

 

PS:这里props接受还有另外一种数组的形式接收。

export default {
     props: ['foo'],
    created() { // props 会暴露到 `this` 上 console.log(this.foo)
  }
 }

使用对象形式来接受可以对每个 prop 进行数据类型的校验,设置默认值。这是数组形式接受做不到的。

2. 全局事件总线--子传父

说到子传父,大家都会想到$emit,然后父组件通过@接收,还要在父组件的子标签上定义,这是官方的方法。但是在template中会显得很繁琐,所以,全局事件总线很完美的解决了这个问题,在中小型项目上的表现甚至优于vuex,而且全局事件总线不光可以用来子传父,他还能做到$emit一步做不到的兄弟组件之间传值,接下来让我们看个例子。

我在main中定义了

//全局事件总线

Vue.prototype.$Bus = new Vue()

 

这里的Bus就是方法名,大家可以自己随便定义,意思是在Vue原型对象身上创建一个名为Bus的方法,因为Vue的原型对象的属性的方法都可以被Vue实例对象和VC组件实例对象访问得到,所以通过全局事件总线,兄弟组件之间也能传值。

它的使用方法也特别简单:

兄弟组件通过$emit触发自定义事件,另一个组件可以通过$on来接受,这种方法避免了在div中繁琐的监听,转而直接在script中使用,可以说功能性和实用性上对“@接收”碾压。

最后,大家不要忘了在监听使用页面的beforeDestroy()使用以下代码来解绑监听事件。一定要写事件名。不然会把全局事件总线绑定的事件全部解绑了。

this.$Bus.off(‘监听的事件名’)
返回列表