跳到主要内容

说明对于Vue $emit 、$on 、$once 、$off理解?

参考答案:

Vue.js 提供了几个用于父子组件间通信的方法,其中 $emit$on$once$off 是四种常用的方法。

  1. $emit:这是一个子组件向父组件发送消息的方法。子组件可以使用 $emit 触发一个自定义事件,并传递一些参数给父组件。父组件可以通过监听这个自定义事件来接收参数。例如,如果子组件中有一个按钮,当按钮被点击时,子组件可以使用 $emit 触发一个名为 button-clicked 的事件,并传递一个参数给父组件。
// 子组件
this.$emit('button-clicked', 'Hello from child component!');

在父组件中,你可以通过 v-on(或简写为 @)来监听这个事件,并在事件处理函数中接收参数。

<!-- 父组件 -->
<child-component @button-clicked="handleButtonClick"></child-component>
// 父组件
methods: {
  handleButtonClick(message) {
    console.log(message); // 输出:Hello from child component!
  }
}
  1. $on:这是一个用于监听子组件触发的事件的方法。你可以在父组件中使用 $on 来监听子组件触发的事件,并在事件处理函数中执行相应的逻辑。
// 父组件
mounted() {
  this.$on('button-clicked', this.handleButtonClick);
},
methods: {
  handleButtonClick(message) {
    console.log(message); // 输出:Hello from child component!
  }
}
  1. $once:这个方法与 $on 类似,但它只监听一次事件,然后自动移除监听器。这意味着,如果你使用 $once 监听一个事件,那么当该事件被触发一次后,监听器就会被自动移除,不会再次触发。
// 父组件
mounted() {
  this.$once('button-clicked', this.handleButtonClick);
},
methods: {
  handleButtonClick(message) {
    console.log(message); // 只输出一次:Hello from child component!
  }
}
  1. $off:这个方法用于移除事件监听器。你可以使用 $off 来移除之前使用 $on$once 添加的监听器。如果你不提供任何参数,那么它会移除所有的监听器。如果你提供一个事件名,那么它会移除该事件的所有监听器。如果你同时提供事件名和监听器函数,那么它只会移除指定的监听器。
// 移除所有监听器
this.$off();

// 移除名为 'button-clicked' 的所有监听器
this.$off('button-clicked');

// 移除名为 'button-clicked' 的特定监听器
const myHandler = (message) => {
  console.log(message);
};
this.$on('button-clicked', myHandler);
this.$off('button-clicked', myHandler);

通过使用这些方法,你可以在 Vue.js 应用程序中实现父子组件间的通信和事件处理。