在Vue中,如何检查是否有任何父组件已订阅了孩子正在发出的事件?

时间:2019-05-27 12:06:58

标签: javascript vue.js vuejs2 vue-component

我有一个组件,有时被用作父级的子级,有时没有任何父级。

此组件发出一个特定的事件,该事件要么被父级(如果已订阅)捕获,要么我想由该组件本身来处理。

因此,在运行时,如何以编程方式检查

if (someone is listening to the event){
    let them catch and handle it
}else {
    let's handle it by our own
}

2 个答案:

答案 0 :(得分:2)

这似乎是一个有问题的设计,但这使您可以检查传递给组件的侦听器:

this.$listeners;

它返回父作用域事件侦听器。参见the doc here

特别是针对您的用例:

// To check whether the "myEvent" event is listened to
if (this.$listeners.myEvent){
  // let them catch and handle it
} else {
  // let's handle it by our own
}

答案 1 :(得分:0)

您可以从父母那里传递布尔型道具。

在父组件中:

<Child :isParent='true'></Child>

在子组件中:

props : {
  isParent : Boolean
},

methods : {
  actionEvent : function(){
    if(this.isParent){
      // Emit event
    }
    else{
      // Take care over here.
    }
  }
}