uniapp 编辑
uniapp 编辑功能实现方法
页面布局与数据绑定
使用 uni-forms 组件构建表单结构,通过 v-model 实现双向数据绑定。编辑页面通常需要接收列表页传递的 id 参数,在 onLoad 生命周期中获取并查询对应数据。
onLoad(options) {
this.id = options.id
if (this.id) this.getDetail()
},
methods: {
async getDetail() {
const res = await uniCloud.database().collection('articles').doc(this.id).get()
this.formData = res.result.data
}
}
表单验证处理
配置 uni-forms 的 rules 属性实现校验规则,通过 validate 方法触发验证。支持前端本地验证和云端校验两种方式,复杂业务逻辑建议使用 uniCloud 的 validator 模块。
rules: {
title: {
rules: [{ required: true, errorMessage: '标题不能为空' }]
},
content: {
rules: [{ validateFunction: this.checkContent }]
}
}
图片上传处理
使用 uni-file-picker 组件实现文件上传,配合 uniCloud.uploadFile 方法。注意处理上传进度和结果回调,建议对图片进行压缩和格式转换。

<uni-file-picker limit="9" @select="uploadSuccess"></uni-file-picker>
数据提交逻辑
区分新增和编辑模式,通过条件判断调用不同的云函数。使用 try-catch 捕获异常,提交成功后通过 uni.showToast 提示用户。
async submitForm() {
const valid = await this.$refs.form.validate()
if (!valid) return
const method = this.id ? 'update' : 'add'
const res = await uniCloud.callFunction({
name: 'article',
data: { method, data: this.formData }
})
}
跨平台兼容性处理
样式适配方案
使用 rpx 单位保证各平台尺寸适配,通过条件编译处理平台差异样式。复杂布局建议使用 flex 配合 @media 查询实现响应式。

/* #ifdef H5 */
.edit-container { padding: 20px; }
/* #endif */
/* #ifdef MP-WEIXIN */
.edit-container { padding: 15px; }
/* #endif */
API 差异处理
封装通用方法处理各平台 API 调用差异,如导航栏按钮事件。使用 uni.$on 和 uni.$emit 实现跨页面通信,替代部分平台特有的 API。
const navigateTo = (url) => {
// #ifdef H5
window.location.href = url
// #endif
// #ifdef MP-WEIXIN
uni.navigateTo({ url })
// #endif
}
性能优化建议
数据缓存策略
对频繁访问的编辑数据使用 uni.setStorageSync 缓存,设置合理的过期时间。表单内容实时变化时可启用 debounce 函数减少存储操作频率。
渲染性能优化
长列表编辑场景使用 virtual-list 组件,表单字段过多时采用分组加载策略。避免在 v-for 中使用复杂表达式,必要时通过计算属性预处理数据。
computed: {
filteredFields() {
return this.formFields.filter(item => !item.hidden)
}
}
云函数优化
批量操作使用数据库事务,敏感操作添加 permission 校验。通过 uniCloud.redis 缓存常用数据,减少数据库查询压力。






