Vue中$emit的用法

对于$emit的用法

可以总结:

  1. 子组件通过$emit的方式,调用父组件中的事件,进行传递数据
  2. $emit函数只能在子组件中使用

一、子组件

  <div>
    <!-- 1 给子组件绑定一个点击事件 -->
    <el-button type="primary" size="small" @click="btnFn">我是子组件</el-button>
  </div>
</template>

<script>
export default {
  methods: {
    // 2 声明事件处理函数
    btnFn() {
      console.log("点击到了");
      // 3 子传父
      // 执行$emit函数,会调用父组件中名为sonEvent的函数再将"hello world"的值传过去
      this.$emit("sonEvent", "hello world");
    },
  },
};
</script>

从上面子组件的代码上看,我们可以知道,当子组件被点击的时候,会触发btnFn事件,再声明btnFn()事件处理函数,之后执行$emit函数,该emit函数会调用下面父组件中名为sonEvent的事件,并将“hello world”的值传递给父组件。

二、父组件

  <div id="app">
    <!-- 4 接收子传父 @inputFn="fatInput" -->
    <!-- @sonEvent 与子组件this.$emit('sonEvent',...)起的名字一致 -->
    <son @sonEvent="sonFn"></son>
  </div>
</template>

<script>
import son from "./components/son.vue";
export default {
  name: "app",
  components: {
    son,
  },
  methods: {
    // 5 接收参数
    sonFn(data) {
      console.log(data);
    },
  },
};
</script>

父组件的sonEvent事件被触发,调用sonFn函数,可以在控制台上打印接收到子组件传递过来的值

三、运行结果

在这里插入图片描述

### Vue3 中 `$emit` 的使用方法 在 Vue 3 中,`$emit` 是实现父子组件间通信的重要机制之一。通过 `emits` 选项可以定义一个组件能够触发的事件列表。 #### 定义可触发事件 为了使代码更加健壮并提高开发体验,在子组件内声明允许发出的事件名: ```javascript export default { name: 'ChildComponent', emits: ['custom-event'], // 显式声明可触发的自定义事件 } ``` 当需要从子组件向父组件传递消息时,则可以通过调用 `this.$emit()` 方法来触发这些已注册过的事件[^1]。 #### 触发事件并向上传递参数 假设有一个按钮点击后想要通知父级发生了某些变化的情况: ```html <template> <button @click="handleClick">点击我</button> </template> <script> export default { methods: { handleClick() { this.$emit('custom-event', { message: '来自子组件的信息' }); } } }; </script> ``` 这段代码展示了如何利用 `$emit` 发送带有载荷的数据给上级组件[^4]。 #### 父组件监听子组件事件 为了让父组件能响应上述由子组件发起的动作,可以在模板中使用 `v-on:` 来绑定对应的处理函数: ```html <template> <div class="parent"> <!-- 监听名为 custom-event 的事件 --> <child-component v-on:custom-event="handleCustomEvent"></child-component> </div> </template> <script> import ChildComponent from './components/ChildComponent.vue'; export default { components: { ChildComponent }, methods: { handleCustomEvent(data) { console.log(`接收到来自子组件的消息:${data.message}`); } } }; </script> ``` 此部分说明了怎样设置好监听器以便于捕获到下层传来的信号,并对其进行适当的操作[^3]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值