当前位置:首页 > uni-app

uniapp组件写法

2026-02-05 17:30:38uni-app

uniapp组件的基本结构

在uniapp中创建组件通常需要遵循Vue单文件组件(SFC)规范。一个典型的组件文件包含<template><script><style>三个部分。

<template>
  <view class="example-component">
    <text>{{ message }}</text>
  </view>
</template>

<script>
export default {
  name: 'ExampleComponent',
  props: {
    msg: {
      type: String,
      default: 'Hello'
    }
  },
  data() {
    return {
      message: this.msg
    }
  },
  methods: {
    updateMessage(newMsg) {
      this.message = newMsg
    }
  }
}
</script>

<style scoped>
.example-component {
  padding: 20px;
}
</style>

组件的注册与使用

全局注册通常在main.js中进行:

import Vue from 'vue'
import ExampleComponent from '@/components/ExampleComponent.vue'

Vue.component('example-component', ExampleComponent)

局部注册在页面或父组件中进行:

<script>
import ExampleComponent from '@/components/ExampleComponent.vue'

export default {
  components: {
    ExampleComponent
  }
}
</script>

使用组件:

<template>
  <view>
    <example-component msg="Welcome"></example-component>
  </view>
</template>

组件间的通信方式

父组件向子组件传递数据:

<child-component :propName="parentData"></child-component>

子组件向父组件发送事件:

// 子组件
this.$emit('custom-event', payload)

// 父组件
<child-component @custom-event="handleEvent"></child-component>

插槽的使用

默认插槽:

<!-- 子组件 -->
<view>
  <slot></slot>
</view>

<!-- 父组件 -->
<child-component>
  <text>默认插槽内容</text>
</child-component>

具名插槽:

<!-- 子组件 -->
<view>
  <slot name="header"></slot>
  <slot name="footer"></slot>
</view>

<!-- 父组件 -->
<child-component>
  <template v-slot:header>
    <text>头部内容</text>
  </template>
  <template v-slot:footer>
    <text>底部内容</text>
  </template>
</child-component>

生命周期钩子

uniapp组件支持Vue的所有生命周期钩子:

export default {
  beforeCreate() {},
  created() {},
  beforeMount() {},
  mounted() {},
  beforeUpdate() {},
  updated() {},
  beforeDestroy() {},
  destroyed() {},
  // uniapp特有生命周期
  onLoad() {},
  onShow() {},
  onReady() {},
  onHide() {},
  onUnload() {}
}

样式作用域

使用scoped属性可限制样式作用域:

<style scoped>
/* 仅作用于当前组件 */
</style>

条件与循环渲染

条件渲染:

<view v-if="show">显示内容</view>
<view v-else>备选内容</view>

循环渲染:

<view v-for="(item, index) in items" :key="index">
  {{ item.text }}
</view>

表单组件绑定

使用v-model实现双向绑定:

<input v-model="inputValue" type="text">
<checkbox-group v-model="checkedValues">
  <checkbox value="option1"></checkbox>
  <checkbox value="option2"></checkbox>
</checkbox-group>

自定义事件处理

组件内部触发事件:

methods: {
  handleClick() {
    this.$emit('click', eventData)
  }
}

外部监听事件:

<custom-button @click="handleButtonClick"></custom-button>

组件性能优化

使用v-once进行静态内容优化:

<text v-once>永不改变的内容</text>

合理使用计算属性:

uniapp组件写法

computed: {
  filteredList() {
    return this.list.filter(item => item.active)
  }
}

标签: 写法组件
分享给朋友:

相关文章

vue实现组件循环

vue实现组件循环

Vue 组件循环的实现方法 在 Vue 中实现组件循环通常使用 v-for 指令,可以循环渲染数组或对象的数据到组件上。 基本数组循环 通过 v-for 指令遍历数组,渲染多个相同结构的组件。…

vue组件的实现

vue组件的实现

Vue 组件的实现方式 Vue 组件可以通过多种方式实现,主要包括单文件组件(SFC)、全局注册和局部注册。以下是常见的实现方法: 单文件组件(SFC) 单文件组件是 Vue 最推荐的组件化开发方式…

组件elementui

组件elementui

ElementUI 简介 ElementUI 是一套基于 Vue.js 的桌面端组件库,由饿了么前端团队开发并开源。它提供了丰富的 UI 组件(如按钮、表单、表格等),适合快速构建企业级中后台产品。…

vue实现秒表组件

vue实现秒表组件

实现秒表组件的基本思路 使用Vue实现秒表组件需要管理时间状态、控制计时器的启动/暂停/重置功能,并通过计算属性动态显示格式化时间。核心逻辑包括利用setInterval更新计时数据,并通过生命周期钩…

vue 滑杆组件实现

vue 滑杆组件实现

实现基础滑杆组件 使用Vue的v-model和原生<input type="range">实现基础功能: <template> <div> <i…

vue实现附件组件

vue实现附件组件

Vue 实现附件组件的方法 基础组件结构 使用 Vue 的单文件组件(SFC)方式创建一个基础的附件上传组件。需要包含文件选择、预览、上传和删除功能。 <template> <…