当前位置:首页 > uni-app

uniapp组件写法

2026-01-13 19:22:03uni-app

Uniapp 组件的基本写法

Uniapp 的组件写法与 Vue 类似,支持单文件组件(.vue 文件)。一个基本的组件通常包含三个部分:<template><script><style>

<template>
  <view class="my-component">
    <text>{{ message }}</text>
    <button @click="handleClick">点击我</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello Uniapp!'
    }
  },
  methods: {
    handleClick() {
      console.log('按钮被点击了')
    }
  }
}
</script>

<style>
.my-component {
  padding: 20px;
}
button {
  margin-top: 10px;
}
</style>

组件注册与使用

在 Uniapp 中,组件分为全局注册和局部注册两种方式。

全局注册main.js 中注册组件,使其在整个应用中可用:

import Vue from 'vue'
import MyComponent from './components/MyComponent.vue'

Vue.component('my-component', MyComponent)

局部注册 在需要使用组件的页面中引入:

import MyComponent from '../../components/MyComponent.vue'

export default {
  components: {
    MyComponent
  }
}

组件间通信

Uniapp 组件间通信主要有以下几种方式:

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

<!-- 父组件 -->
<child-component :msg="parentMessage"></child-component>

<!-- 子组件 ChildComponent.vue -->
<script>
export default {
  props: {
    msg: String
  }
}
</script>

$emit 触发事件 子组件向父组件发送事件:

<!-- 子组件 -->
<button @click="$emit('custom-event', payload)">触发事件</button>

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

使用 Vuex 状态管理 对于复杂应用,建议使用 Vuex 进行状态管理:

// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  }
})

// 组件中使用
this.$store.commit('increment')
console.log(this.$store.state.count)

生命周期钩子

Uniapp 组件支持 Vue 的生命周期钩子,同时还扩展了一些应用特有的生命周期:

export default {
  onLoad() {
    // 页面加载时触发
  },
  onShow() {
    // 页面显示时触发
  },
  mounted() {
    // 组件挂载完成
  },
  beforeDestroy() {
    // 组件销毁前
  }
}

样式作用域

使用 scoped 属性可以限制样式只作用于当前组件:

<style scoped>
/* 这些样式只作用于当前组件 */
.my-class {
  color: red;
}
</style>

组件插槽

Uniapp 支持 Vue 的插槽机制,用于内容分发:

<!-- 父组件 -->
<my-component>
  <template v-slot:default>默认内容</template>
  <template v-slot:footer>页脚内容</template>
</my-component>

<!-- 子组件 MyComponent.vue -->
<view>
  <slot></slot>
  <view class="footer">
    <slot name="footer"></slot>
  </view>
</view>

注意事项

  • 组件名应使用 kebab-case(短横线分隔命名)
  • 避免在组件中使用 id 选择器,因为 Uniapp 会编译到不同平台
  • 组件中的 v-for 循环需要指定唯一的 key
  • 在小程序平台,组件样式可能会受到更多限制

uniapp组件写法

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

相关文章

vue穿梭框组件实现

vue穿梭框组件实现

实现基础穿梭框组件 在Vue中实现穿梭框组件,可以使用<el-transfer>(Element UI)或手动实现。以下是手动实现的核心逻辑: <template> &…

vue组件实现

vue组件实现

Vue 组件实现基础 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。组件的实现包括定义、注册、数据传递和生命周期管理等。 定义组件 组件可以通过单文件组件(.…

实现vue组件

实现vue组件

Vue 组件的基本实现 Vue 组件是 Vue.js 的核心特性之一,允许将 UI 拆分为独立、可复用的模块。以下是实现 Vue 组件的几种方式: 单文件组件 (SFC) 使用 .vue 文件格式…

vue radio组件实现

vue radio组件实现

Vue Radio 组件实现 在 Vue 中实现 Radio 组件可以通过原生 HTML 的 <input type="radio"> 结合 Vue 的响应式特性,或者使用第三方 UI 库…

vue 实现组件刷新

vue 实现组件刷新

实现组件刷新的方法 在Vue中,组件刷新通常指重新渲染组件或重置组件状态。以下是几种常见的实现方式: 使用v-if控制渲染 通过v-if指令可以销毁并重新创建组件: <template&…

vue实现水印组件

vue实现水印组件

Vue 水印组件实现 基础水印组件实现 创建一个基础水印组件,通过 props 接收文本、颜色、大小等参数: <template> <div class="watermark-…