vue3.x中emits的基本用法实例

下面是详细讲解Vue3.x中emits的基本用法实例的攻略,包含两个示例说明。

Vue3.x中emits的基本用法实例

什么是emits?

emits是Vue3新引入的一个选项,它用于为自定义组件声明触发的自定义事件。在Vue3中,$emit方法被移到了组件实例的emits属性中,因此emits属性的主要作用就是声明自定义事件,为自定义组件提供了非常好的解耦和复用性。

如何使用emits?

在组件定义中,我们可以在options中声明emits属性:

import { defineComponent } from 'vue'

export default defineComponent({
  emits: ['custom-event'],
  // ...
})

在上面代码中,我们声明了自定义事件名'custom-event'

当然,我们也可以使用对象来声明多个事件:

import { defineComponent } from 'vue'

export default defineComponent({
  emits: {
    'custom-event': (arg1, arg2) => {
      if (arg1 === 'foo') {
        return true
      } else {
        return new Error('arg1不是foo')
      }
    },
    'another-custom-event': null
  },
  // ...
})

在上面代码中,我们声明了两个自定义事件名:'custom-event''another-custom-event'

示例1:Custom Button

接下来,我们来看一个例子。假设我们需要一个CustomButton组件,它有两个按钮,分别是确认取消,我们可以为组件声明两个自定义事件名:'confirm''cancel',当用户点击这两个按钮时,分别触发这两个自定义事件。

首先,我们需要在组件中声明emits属性,来声明自定义事件名:

import { defineComponent } from 'vue'

export default defineComponent({
  emits: ['confirm', 'cancel'],
  // ...
})

接下来,我们需要在template中使用这两个按钮:

<template>
  <div>
    <button @click="$emit('confirm')">确认</button>
    <button @click="$emit('cancel')">取消</button>
  </div>
</template>

在上面代码中,我们使用了$emit方法,来分别触发两个自定义事件。

最后,我们可以在父组件中使用这个CustomButton组件,并监听相应的自定义事件:

<template>
  <custom-button @confirm="onConfirm" @cancel="onCancel"/>
</template>

<script>
import CustomButton from '@/components/CustomButton.vue';

export default {
  components: {
    CustomButton,
  },
  methods: {
    onConfirm() {
      console.log('确认');
    },
    onCancel() {
      console.log('取消');
    },
  },
};
</script>

在上面代码中,我们监听了confirmcancel两个自定义事件,并在相应的回调函数中输出了相应的信息。

示例2:Custom Input

接下来,我们再介绍一个CustomInput组件的例子。假设我们需要一个CustomInput组件,它可以接受用户输入,并将输入的值保存在组件内部的状态中,同时还声明了change事件,当用户输入内容发生变化时,会触发此自定义事件。

首先,我们需要在组件中声明emits属性,来声明自定义事件名:

import { defineComponent } from 'vue'

export default defineComponent({
  emits: ['change'],
  // ...
})

接着,在template中使用v-model,并在输入框的input事件中触发change事件:

<template>
  <div>
    <input type="text" v-model="value" @input="$emit('change', value)">
  </div>
</template>

在上面代码中,我们使用了v-model来绑定组件内部状态中的value变量,同时在输入框的input事件中触发了change自定义事件,参数为当前的输入框值value

最后,我们可以在父组件中使用这个CustomInput组件,并监听相应的自定义事件:

<template>
  <custom-input @change="onChange" />
</template>

<script>
import CustomInput from '@/components/CustomInput.vue';

export default {
  components: {
    CustomInput,
  },
  methods: {
    onChange(value) {
      console.log('输入框的值变更为:'+value);
    },
  },
};
</script>

在上面代码中,我们监听了change自定义事件,并在回调函数中输出了相应的信息。

这就是Vue3.x中emits的基本用法实例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3.x中emits的基本用法实例 - Python技术站

(1)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue源码学习之Object.defineProperty 对数组监听

    下面我来为您介绍一下“Vue源码学习之Object.defineProperty对数组监听”的攻略。 1. Object.defineProperty的基本用法 首先,我们来了解一下Object.defineProperty的基本用法及其作用。 Object.defineProperty是ES5新增的一个API,它可以用来精确添加或修改对象的属性。该方法将直…

    Vue 2023年5月29日
    00
  • 详解mpvue中小程序自定义导航组件开发指南

    “详解mpvue中小程序自定义导航组件开发指南”的完整攻略包括以下几个步骤: 1. 创建自定义组件 创建自定义导航组件的方法与创建普通自定义组件类似。在components目录下新建 cus-nav 文件夹,并在该文件夹下创建 cus-nav.vue 文件。 <template> <view> <view class=&quot…

    Vue 2023年5月27日
    00
  • vue网站优化实战之秒开网页

    下面是具体的攻略: 1. 优化网络请求 压缩文件 压缩前端文件是一个非常常见的优化手段,通常使用Gzip或者Brotli。Gzip是一种广泛使用的压缩算法,可以减小文件大小并改善网页加载速度。而Brotli是Google开发的一种更高效的压缩算法,与Gzip相比可以达到更高的压缩率。可以在服务器端配置,启用Gzip和Brotli压缩。 使用CDN 使用CDN…

    Vue 2023年5月28日
    00
  • Vue对象的深层劫持详细讲解

    Vue对象的深层劫持详细讲解 Vue.js是一个JavaScript框架,可以用于基于MVVM模式的Web应用程序开发。其中最重要的部分是Vue对象(Vue实例),它是Vue应用程序的根实例,并且通过对Vue对象进行劫持可以实现响应式数据绑定。在Vue.js中,有两种类型的数据劫持:深层劫持和浅层劫持。本文将详细讲解深层劫持及其使用方法。 什么是深层劫持? …

    Vue 2023年5月28日
    00
  • Vue 开发必须知道的36个技巧(小结)

    Vue 开发必须知道的36个技巧(小结) 本文总结了36个Vue开发中必须知道的技巧,内容涵盖了组件开发、状态管理、路由导航、性能优化等多个方面的技巧。 组件开发篇 Tip1:合理使用computed computed是一个非常强大的特性,但也有很多约束,比如它会缓存计算结果;还要注意它不应该有任何副效应,也不应该修改任何数据。所以,在使用computed …

    Vue 2023年5月27日
    00
  • Vue组件之非单文件组件的使用详解

    下面我将为您详细讲解“Vue组件之非单文件组件的使用详解”的完整攻略。 什么是非单文件组件? 非单文件组件是指将组件的HTML、JS、CSS等代码都写在同一个文件中,并使用Vue.extend()方法将其构造成组件的一种方式。这种方式比较旧,但在一些老的Vue项目中仍有应用。目前Vue的官方文档已经不推荐使用这种方式。 非单文件组件的优缺点 优点 代码简单。…

    Vue 2023年5月28日
    00
  • vue更新数据却不渲染页面的解决

    下面是关于Vue更新数据却不渲染页面的解决攻略的详细讲解。 问题背景 在Vue中,一般我们通过修改组件的数据来更新页面。但有时候在修改数据后,页面却没有自动更新,这可能会给我们带来很多困扰。这种情况在Vue中被称作“数据更新但是视图不更新”。 可能出现原因 造成“数据更新但是视图不更新”的原因主要有以下几种: Vue的异步更新机制:当我们修改Vue中的数据时…

    Vue 2023年5月29日
    00
  • vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法

    针对“vue跳转同一个组件,参数不同,页面接收值只接收一次”的问题,我们可以采用以下两种解决方案: 方案一:使用watch监听$route变化 这种方式需要在组件的created或mounted生命周期中,监听vue-router的$route对象。如下所示: <template> <div> <p>{{ message …

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部