UniApp在Vue3下使用setup语法糖创建和使用自定义组件的操作方法

 更新时间:2024年11月22日 09:59:12   作者:漫天转悠  
通过defineProps定义属性,defineEmits定义事件,computed创建计算属性,emitEvent方法触发事件,在其他组件中导入并使用这些自定义组件,传递属性和监听事件,实现组件的复用性和可维护性,感兴趣的朋友跟随小编一起看看吧

UniApp在Vue3下使用setup语法糖创建和使用自定义组件

在现代前端开发中,Vue 3 的 <script setup> 语法糖极大地简化了组件的编写和使用。本文将详细介绍如何在 UniApp 中使用 Vue 3 的 <script setup> 语法创建自定义组件,并在其他组件中使用这些自定义组件。

1. 创建自定义组件

首先,我们创建一个简单的自定义组件 MyComponent.vue。这个组件将接收一些属性,并展示一些基本内容。

MyComponent.vue

<template>
  <view :style="styleObject">
    <p v-if="showText">{{ text }}</p>
    <p>Number: {{ number }}</p>
    <p>Boolean: {{ boolean }}</p>
    <ul>
      <li v-for="item in array" :key="item">{{ item }}</li>
    </ul>
    <p>Object: {{ object.name }} - {{ object.age }}</p>
    <button @click="emitEvent">点击触发事件</button>
  </view>
</template>
<script setup>
import { defineProps, defineEmits, computed } from 'vue';
// 定义接收的 props
const props = defineProps({
  text: {
    type: String,
    default: '默认文本'
  },
  number: {
    type: Number,
    default: 0
  },
  boolean: {
    type: Boolean,
    default: false
  },
  array: {
    type: Array,
    default: () => []
  },
  object: {
    type: Object,
    default: () => ({ name: '默认名字', age: 20 })
  }
});
// 定义触发的事件
const emit = defineEmits(['customEvent']);
// 计算属性,用于处理样式对象
const styleObject = computed(() => ({
  marginTop: props.number + 'px',
  color: props.boolean ? 'red' : 'black'
}));
// 方法:触发自定义事件
const emitEvent = () => {
  emit('customEvent', '这是一个自定义事件');
};
</script>
<style scoped>
/* 组件内的局部样式 */
button {
  margin-top: 10px;
}
</style>

详细解释

1.1 定义属性 (defineProps)

MyComponent.vue 中,我们使用 defineProps 来定义组件可以接收的属性。每个属性都有一个类型和默认值:

const props = defineProps({
  text: {
    type: String,
    default: '默认文本'
  },
  number: {
    type: Number,
    default: 0
  },
  boolean: {
    type: Boolean,
    default: false
  },
  array: {
    type: Array,
    default: () => []
  },
  object: {
    type: Object,
    default: () => ({ name: '默认名字', age: 20 })
  }
});

1.2 定义事件 (defineEmits)

我们使用 defineEmits 来定义组件可以触发的事件。在这个例子中,我们定义了一个名为 customEvent 的事件:

const emit = defineEmits(['customEvent']);

1.3 计算属性 (computed)

我们使用 computed 来创建一个计算属性 styleObject,它根据传递的 numberboolean 属性生成样式对象:

const styleObject = computed(() => ({
  marginTop: props.number + 'px',
  color: props.boolean ? 'red' : 'black'
}));

1.4 方法 (emitEvent)

我们定义了一个方法 emitEvent,当用户点击按钮时,触发 customEvent 事件,并传递一个消息:

const emitEvent = () => {
  emit('customEvent', '这是一个自定义事件');
};

2. 使用自定义组件

接下来,我们在另一个 .vue 文件中导入并使用这个自定义组件,同时传递属性和监听事件。

App.vue

<template>
  <view>
    <MyComponent 
      text="你好,世界!"
      :number="50"
      :boolean="true"
      :array="['苹果', '香蕉', '橙子']"
      :object="{ name: '张三', age: 30 }"
      @customEvent="handleCustomEvent"
    />
  </view>
</template>
<script setup>
import MyComponent from './components/MyComponent.vue';
// 定义一个方法来处理自定义事件
const handleCustomEvent = (message) => {
  console.log('自定义事件触发:', message);
};
</script>
<style>
/* 页面级别的样式 */
</style>

详细解释

2.1 导入和使用自定义组件

App.vue 中,我们导入 MyComponent 并在模板中使用它,同时传递属性和监听事件:

<MyComponent 
  text="你好,世界!"
  :number="50"
  :boolean="true"
  :array="['苹果', '香蕉', '橙子']"
  :object="{ name: '张三', age: 30 }"
  @customEvent="handleCustomEvent"
/>

2.2 处理自定义事件

我们定义了一个方法 handleCustomEvent 来处理自定义事件 customEvent

const handleCustomEvent = (message) => {
  console.log('自定义事件触发:', message);
};

总结

通过以上步骤,我们创建了一个自定义组件 MyComponent,并在 App.vue 中使用它。我们传递了多种类型的属性,并且监听了自定义事件。这种方式使得组件的复用性和可维护性大大增强。

到此这篇关于UniApp在Vue3下使用setup语法糖创建和使用自定义组件的文章就介绍到这了,更多相关UniApp Vue3 setup语法糖内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文掌握在Vue3中书写TSX的使用方法

    一文掌握在Vue3中书写TSX的使用方法

    但随着vue3版本的到来,对typescript的支持度越来越高,tsx语法也被大部分人越来越接收,所以很多项目都是搭配 Vue3 + TS 进行的,这篇文章主要介绍了一文掌握在Vue3中书写TSX的方法,需要的朋友可以参考下
    2023-05-05
  • vue实现书本翻页动画效果实例详解

    vue实现书本翻页动画效果实例详解

    这篇文章主要介绍了vue简单实现书本翻页效果,需要的朋友可以参考下
    2022-04-04
  • vue-resource + json-server模拟数据的方法

    vue-resource + json-server模拟数据的方法

    本篇文章主要介绍了vue-resource + json-server模拟数据的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Vuex modules模式下mapState/mapMutations的操作实例

    Vuex modules模式下mapState/mapMutations的操作实例

    这篇文章主要介绍了Vuex modules 模式下 mapState/mapMutations 的操作实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Vue.prototype全局变量的实现示例

    Vue.prototype全局变量的实现示例

    在Vue中可以使用Vue.prototype向Vue的全局作用域添加属性或方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)

    Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)

    组件(Component)是 Vue.js 最强大的功能之一。接下来给大家介绍vuejs单向绑定、双向绑定、列表渲染、响应函数的相关知识,非常不错,感兴趣的朋友一起看看吧
    2016-09-09
  • Element Dropdown下拉菜单的使用方法

    Element Dropdown下拉菜单的使用方法

    这篇文章主要介绍了Element Dropdown下拉菜单的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 解决vue过滤器filters获取不到this对象的问题

    解决vue过滤器filters获取不到this对象的问题

    这篇文章主要介绍了解决vue过滤器filters获取不到this对象的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Vue-不允许嵌套式的渲染方法

    Vue-不允许嵌套式的渲染方法

    今天小编就为大家分享一篇Vue-不允许嵌套式的渲染方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue中使用vux配置代码详解

    Vue中使用vux配置代码详解

    这篇文章主要介绍了Vue中使用vux配置代码详解,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09

最新评论