一、环境配置与前置条件
-
开发工具要求
- HBuilderX 4.64+(鸿蒙插件已预装)
- DevEco Studio 5.0.3.400+(真机调试必备)
- 鸿蒙离线SDK(通过HBuilderX导入,每个项目独立配置)
-
项目初始化
TypeScript
# 创建Vue3项目(鸿蒙仅支持Vue3)
npx degit dcloudio/uni-preset-vue#vite-ts my-project
在 manifest.json
中声明鸿蒙支持:
TypeScript
"harmonyos": {
"appType": "ohos",
"packageName": "com.example.app",
"minPlatformVersion": 5 // 适配HarmonyOS 5
}
二、组件封装核心原则
-
API设计规范
- 通过
defineProps
定义明确参数类型 - 使用
@Prop
声明响应式属性(ArkTS语法)
- 通过
TypeScript
// components/DistributedButton.vue
<script setup>
defineProps({
buttonText: { type: String, required: true },
onClick: { type: Function, default: () => {} }
})
</script>
2.跨平台兼容策略
- 使用条件编译隔离鸿蒙专属逻辑:
TypeScript
<!-- #ifdef HARMONYOS -->
<harmony-card @touch="handleDistributedEvent">
<!-- #endif -->
3.性能优化
避免在组件内直接操作DOM(鸿蒙渲染引擎限制)
使用 Flex/Grid
布局代替绝对定位
三、实战组件封装示例
案例1:分布式交互按钮(跨设备控制)
TypeScript
<!-- components/HarmonyButton.vue -->
<template>
<button class="harmony-btn" @click="triggerAction">
<!-- 鸿蒙专属图标 -->
<!-- #ifdef HARMONYOS -->
<span class="harmony-icon">📱</span>
<!-- #endif -->
{{ buttonText }}
</button>
</template>
<script setup>
import { ref } from 'vue'
const props = defineProps({ buttonText: String })
const triggerAction = () => {
// 鸿蒙分布式API调用
// #ifdef HARMONYOS
import('@ohos.distributedHardware').then(module => {
module.triggerDeviceAction('device_control')
})
// #endif
}
</script>
案例2:服务卡片组件
TypeScript
<!-- components/ServiceCard.vue -->
<template>
<harmony-card>
<template #header>
<text class="card-title">{{ title }}</text>
</template>
<slot name="content"></slot>
</harmony-card>
</template>
<style>
/* 适配鸿蒙的样式 */
.harmony-card {
border-radius: 8vp;
background-color: #FFF;
padding: 12vp;
}
</style>
四、模块化开发最佳实践
- 工程结构规范
TypeScript
src/
├── components/ // 可复用组件
├── modules/ // 业务模块(购物车、用户等)
├── utils/ // 工具函数
└── hooks/ // 组合式API
2.状态管理方案
- 使用
Pinia
管理跨模块状态:
TypeScript
// modules/cartStore.ts
import { defineStore } from 'pinia'
export const useCartStore = defineStore('cart', {
state: () => ({ items: [] }),
actions: { addItem(item) { /* ... */ } }
})
五、调试与问题解决
-
常见报错处理
属性未初始化:为组件属性设置默认值
TypeScript
@Prop title: string = "" // 必须初始化
API调用异常 :检查 module.json5
权限声明
TypeScript
"requestPermissions": [
"ohos.distributedHardware.DISTRIBUTED_DATASYNC"
]
性能监控工具
使用 DevEco Studio 的 ArkCompiler 分析组件渲染性能