当前位置: 首页 > wzjs >正文

网站怎么优化呢微信广告推广价格表

网站怎么优化呢,微信广告推广价格表,磁力引擎,南昌建筑工程公司目录 前言1. 实战2. Demo 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 以下主要针对Demo讲解,从实战中的体会 何为命令式 何为声明式 命令式的体验,随时都会有提交的按钮&#xff…

目录

  • 前言
  • 1. 实战
  • 2. Demo

前言

🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF

以下主要针对Demo讲解,从实战中的体会

何为命令式 何为声明式

  • 命令式的体验,随时都会有提交的按钮,但是点击提交才会显示不满足的条件!
    在这里插入图片描述
  • 声明式的体验,不满足条件时,按钮框是灰色的!
    在这里插入图片描述
  1. 命令式:
    提交逻辑复杂,需要异步校验(如服务端唯一性检查)
    表单字段多,依赖用户行为触发验证
    需要复用校验函数,或表单逻辑分散多处

  2. 声明式:
    表单简单明了
    用户体验优先,提前告知无法提交的情况
    状态可视化,一目了然

对比项命令式校验(方法中校验)声明式校验(computed + disabled 控制)
📋 方式在 submit() 方法内通过 validateForm() 显式校验通过 computed 计算属性实时判断是否可提交
🧠 编程范式命令式(Imperative)声明式(Declarative)
💡 表达方式手动控制流程:如果失败就 return false自动计算状态:按钮根据是否满足条件自动禁用
🔁 可复用性校验逻辑聚焦在 validateForm(),但要手动调用校验逻辑绑定在状态中,按钮等 UI 自动响应
🧪 用户体验用户点击“提交”后才提示不通过一目了然,提交按钮禁用,无法误触提交
⚙️ 灵活性可以灵活插入额外逻辑,如提交前弹窗确认逻辑适合纯状态驱动,复杂流程需另外处理
🪛 适用场景需要流程控制、嵌套逻辑、异步校验时更适合表单项简单明确、状态驱动时更适合

1. 实战

实战中抽取的Demo比较简易:

命令式 submit 校验方式(validateForm)

<template><button type="primary" @click="submit">提交</button>
</template><script>
export default {data() {return {imgCntrF: [],damPhotoList: []};},methods: {validateForm() {if (!this.imgCntrF.length) {uni.showToast({ title: '请拍摄箱门照片', icon: 'none' });return false;}if (this.damPhotoList.length < 2) {uni.showToast({ title: '请至少拍摄 2 张照片', icon: 'none' });return false;}return true;},async submit() {if (!this.validateForm()) return;// 执行提交逻辑console.log("提交成功");}}
}
</script>

声明式 computed 控制按钮状态

<template><button type="primary" :disabled="!canSubmit" @click="submit">提交</button>
</template><script>
export default {data() {return {photoList: {door: '',  // 对应 imgCntrFside: ''},damPhotoList: [],photoField: [{ key: 'door', label: '箱门照片' },{ key: 'side', label: '侧面照片' }]};},computed: {canSubmit() {return this.photoField.every(field => this.photoList[field.key]) &&this.damPhotoList.length >= 2;}},methods: {submit() {console.log("提交成功");}}
}
</script>

2. Demo

以UniApp( Vue2 语法 + script 写法)

命令式校验提交(Imperative)

<template><view class="container"><view class="section"><text>箱门照片:</text><button @click="selectBoxDoorPhoto">选择照片</button><image v-if="imgCntrF" :src="imgCntrF" class="img-preview" /></view><view class="section"><text>破损照片:</text><button @click="addDamPhoto">添加照片</button><view class="photo-list"><image v-for="(photo, index) in damPhotoList" :key="index" :src="photo" class="img-preview" /></view></view><button type="primary" @click="submit">提交</button></view>
</template><script>
export default {data() {return {imgCntrF: '', // 箱门照片 URLdamPhotoList: [] // 破损照片 URL 列表};},methods: {selectBoxDoorPhoto() {uni.chooseImage({count: 1,success: (res) => {this.imgCntrF = res.tempFilePaths[0];}});},addDamPhoto() {uni.chooseImage({count: 1,success: (res) => {this.damPhotoList.push(res.tempFilePaths[0]);}});},validateForm() {if (!this.imgCntrF) {uni.showToast({ title: '请拍摄箱门照片', icon: 'none' });return false;}if (this.damPhotoList.length < 2) {uni.showToast({ title: '请至少拍摄 2 张破损照片', icon: 'none' });return false;}return true;},submit() {if (!this.validateForm()) return;// 模拟提交成功uni.showToast({ title: '提交成功', icon: 'success' });}}
};
</script><style>
.container {padding: 20rpx;
}
.section {margin-bottom: 30rpx;
}
.img-preview {width: 200rpx;height: 200rpx;margin-top: 10rpx;
}
.photo-list {display: flex;flex-wrap: wrap;gap: 10rpx;
}
</style>

声明式按钮控制提交(Declarative)

<template><view class="container"><view class="section"><text>箱门照片:</text><button @click="selectBoxDoorPhoto">选择照片</button><image v-if="photoList.door" :src="photoList.door" class="img-preview" /></view><view class="section"><text>破损照片:</text><button @click="addDamPhoto">添加照片</button><view class="photo-list"><image v-for="(photo, index) in damPhotoList" :key="index" :src="photo" class="img-preview" /></view></view><button type="primary" :disabled="!canSubmit" @click="submit">提交</button></view>
</template><script>
export default {data() {return {photoList: {door: '' // 箱门照片},damPhotoList: []};},computed: {canSubmit() {return !!this.photoList.door && this.damPhotoList.length >= 2;}},methods: {selectBoxDoorPhoto() {uni.chooseImage({count: 1,success: (res) => {this.photoList.door = res.tempFilePaths[0];}});},addDamPhoto() {uni.chooseImage({count: 1,success: (res) => {this.damPhotoList.push(res.tempFilePaths[0]);}});},submit() {uni.showToast({ title: '提交成功', icon: 'success' });}}
};
</script><style>
.container {padding: 20rpx;
}
.section {margin-bottom: 30rpx;
}
.img-preview {width: 200rpx;height: 200rpx;margin-top: 10rpx;
}
.photo-list {display: flex;flex-wrap: wrap;gap: 10rpx;
}
</style>
http://www.dtcms.com/wzjs/782996.html

相关文章:

  • 赤峰浩诚网站建设公司wordpress建站流程
  • 电商网站开发 知乎深圳市宝安区天气预报
  • 花生壳做网站是否稳定泉州网站建设解决方案
  • 低价网站建设新闻免费网上开店
  • 江苏网站建设要多少钱小男生和大人做的网站
  • 地下彩票网站建设东莞免费网站制作
  • 沈阳有资质做网站的公司有哪些珠海高端网站建设报价
  • 机器人软件开发和网站开发郑州彩票网站开发
  • 手机哪个网站好如何设置网站的默认页
  • 六安网站建设报价方案长春建站最新消息
  • 网站flash音乐播放器网站的维护方案
  • asp做网站策划书本地门户网站
  • 个人或企业做网络贸易的主要网站推广竞价
  • 网站制作 手机版网站内外链怎么做
  • 英文网站源码屯济宁做网站公司
  • 那些企业网站做的较好全文搜索引擎有哪些
  • 我公司网站开发技术优势舆情报告2023
  • 专业做网站的团队七牛云加速WordPress
  • 茌平做网站推广广告设计排行榜
  • 企业网站可信度建设门户一号wordpress主题
  • 徐州泉山建设局网站网页翻译怎么弄
  • 玉溪网站建设网站建设网站设计公司成都
  • 网站开发前端是什么大型电商平台有哪些
  • 企业网站策划建设方案百度上海华亮建设集团网站
  • 邯郸建设信息网站厦门网站网页设
  • 哪家做网站公司棋牌网站建设多少钱
  • 校园门户网站 建设怎么找有赞做网站
  • 沈阳世纪兴网站建设在网站设计中 网页框架设计
  • 湖北省建设主管网站微博搜索引擎优化
  • 隆尧网站制作 天堂中文在线官网