微信小程序开发实战:利用差异对比显示对象属性变化

微信小程序自定义导航栏避坑:开发者工具与真机显示的2大差异解析 本文深入解析微信小程序自定义导航栏开发中开发者工具与真机显示的2大核心差异,提供透明背景色适配方案和胶囊按钮动态定位技术。通过系统参数获取、自适应样式构建和跨环境调试技巧,帮助开发者实现完美适配,提升小程序用户体验。 阅读详情

前言

在小程序开发中,经常会遇到需要比较两个对象之间的差异并将这些差异可视化展示在界面上的情况。这一过程对于数据管理和用户反馈至关重要。本文将介绍一种实用的方法,可以帮助开发者高效地比较两个对象的属性差异,并将这些差异以直观的方式展示出来。


实现思路

  • 初始化对象和差异存储:

    首先,我们需要初始化两个对象,一个是原始对象 form,另一个是要对比的对象 dateObj。同时,初始化一个差异存储对象 differences 和一个标识 hasDifferences,用于记录是否有不同项。

  • 遍历属性:

    通过遍历两个对象的属性,比较它们的值。如果发现不同的属性,将差异信息存储在 differences 对象中,并将 hasDifferences 标识设为 true。

  • 界面展示差异:

    在小程序的界面中,我们可以使用条件渲染来展示不同的属性。可以根据差异信息为不同的属性添加样式,使其在界面上以不同的颜色显示。

  • 用户反馈:

    最后,我们可以添加一个按钮或触发器,以便用户在需要时查看差异信息。当用户点击按钮时,我们可以显示一个提示框,列出所有不同的属性及其差异值,以便用户清晰地了解数据的变化情况。


代码实例

wxml 文件

<view>
    <view>
        <text>标题:</text>
        <text>{{form.title}}</text>
    </view>
    <view>
        <text style="{{differences.name ? 'color: red;' : ''}}">姓名:</text>
        <text wx:if="{{differences.name}}">
            <text style="color: black;">{{form.name}}</text>
            <text style="color: red;">({{differences.name.formValue}} or {{differences.name.dateObjValue}})</text>
        </text>
        <text wx:else>{{form.name}}</text>
    </view>
    <view>
        <text style="{{differences.age ? 'color: red;' : ''}}">年龄:</text>
        <text wx:if="{{differences.age}}">
            <text style="color: black;">{{form.age}}</text>
            <text style="color: red;">({{differences.age.formValue}} or {{differences.age.dateObjValue}})</text>
        </text>
        <text wx:else>{{form.age}}</text>
    </view>
    <view>
        <text style="{{differences.number ? 'color: red;' : ''}}">数量:</text>
        <text wx:if="{{differences.number}}">
            <text style="color: black;">{{form.number}}</text>
            <text style="color: red;">({{differences.number.formValue}} or {{differences.number.dateObjValue}})</text>
        </text>
        <text wx:else>{{form.number}}</text>
    </view>
    <view>
        <text style="{{differences.address ? 'color: red;' : ''}}">地址:</text>
        <text wx:if="{{differences.address}}">
            <text style="color: black;">{{form.address}}</text>
            <text style="color: red;">({{differences.address.formValue}} or {{differences.address.dateObjValue}})</text>
        </text>
        <text wx:else>{{form.address}}</text>
    </view>
</view>
<!-- 在页面底部显示轻提示 -->
<view>
    <button bindtap="showDiffPrompt">显示不一样的项</button>
</view>

js 文件

Page({
  data: {
    // 原始对象
    form: {
      title: "demo15",
      name: "小红",
      age: "18",
      number: "23",
      address: "上海",
    },
    // 要对比的对象
    dateObj: {
      name: "小红",
      age: "20",
      number: "23",
      address: "北京",
    },
    differences: {}, // 存储不同的属性
    hasDifferences: false, // 标识是否有不同项
    titleColor: '', // 标题颜色
    fieldNames: { // 字段中英文名字到中文名字的映射
      title: "字段1中文名",
      name: "姓名",
      age: "年龄",
      number: "数量",
      address: "地址",
    },
  },

  onLoad() {
    // 获取页面实例对象
    const that = this;
    // 获取表单数据和日期对象
    const form = that.data.form;
    const dateObj = that.data.dateObj;
    // 初始化差异存储对象和差异标识
    const differences = {};
    let hasDifferences = false;

    // 遍历表单数据
    for (const key in form) {
      if (form.hasOwnProperty(key) && dateObj.hasOwnProperty(key)) {
        // 检查是否有差异
        if (form[key] !== dateObj[key]) {
          differences[key] = {
            formValue: form[key],
            dateObjValue: dateObj[key]
          };
          // 如果有不同的项,设置标识为true
          hasDifferences = true;
        }
      }
    }

    // 设置标题颜色,如果有不同的项则变红
    const titleColor = hasDifferences ? 'color: red;' : '';

    // 更新页面数据
    that.setData({
      differences: differences,
      hasDifferences: hasDifferences, // 设置标识变量的值
      titleColor: titleColor // 设置标题颜色
    });
  },

  showDiffPrompt: function () {
    // 打印是否有差异的标识
    console.log(this.data.hasDifferences);
    // 获取差异对象
    const differences = this.data.differences;
    const promptText = [];

    // 遍历差异对象,构建提示文本
    for (const key in differences) {
      if (differences.hasOwnProperty(key)) {
        // 获取字段名,优先使用中文名字或者英文名字
        const fieldName = this.data.fieldNames[key] || key;
        // 获取表单值和日期对象值
        const formValue = differences[key].formValue;
        const dateObjValue = differences[key].dateObjValue;
        // 构建提示文本
        promptText.push(`${fieldName} (${formValue} or ${dateObjValue})`);
      }
    }

    // 显示轻提示
    if (promptText.length > 0) {
      wx.showToast({
        title: `以下项不一样:${promptText.join('、')}`,
        icon: 'none',
        duration: 2000
      });
    } else {
      wx.showToast({
        title: '所有项都一样',
        icon: 'none',
        duration: 2000
      });
    }
  }
});

实现效果

在这里插入图片描述


相关推荐

⭐ element中el-table根据状态改变样式,你不能错过的技能
⭐ 对比两个el-table,差异数据突显标记

微信小程序开发实战:条件渲染wx:if与hidden的性能差异与场景选择 本文深入解析微信小程序开发中条件渲染的两种方式wx:if与hidden的性能差异与适用场景。通过对比测试数据与实战案例,揭示wx:if适合初始不显示且低频切换的内容,而hidden则在高频交互场景中表现更优,帮助开发者根据具体需求做出最优选择,提升小程序性能与用户体验。 阅读详情

相关推荐

微信小程序动画效果实现:CSS3与WXS对比分析

微信小程序凭借“无需安装、即点即用”的特性,已成为移动端主流应用形态。但受限于“双线程架构”(逻辑层JS与渲染层WebView分离),动画实现比传统H5更复杂。本文聚焦小程序内动画的两种核心技术方案——CSS3动画与WXS脚本,覆盖原理对比、代码实现、性能差异及场景推荐,帮开发者避坑提效。本文将按“从生活场景到技术原理→核心概念对比→实战代码演示→性能深度分析→场景推荐”的逻辑展开,确保读者从“能看懂”到“会应用”。双线程模型。

小程序开发 1万+

微信小程序案例3-1 比较数字

页面交互:数据绑定、事件绑定、条件渲染

howard2005的专栏 2427

微信小程序开发技术选型之uniapp、微信原生wxml开发、mpvue、taro、kbone等框架的对比

咱们先看一组数据:据腾讯目前披露,截止至2022年第三季度,微信小程序日活账户数破6亿,同比增长超30%,其日均使用次数实现更快增长,同比增长超50%。小程序在用户规模及商业化方面都取得了极大的成功。支付宝、百度、字节跳动小程序的月活也纷纷超过3亿。从数据来看,小程序依然占据了市场的半壁江山,拥有广泛的市场前景。对应小程序开发领域,这一年也发生了巨大变化。开发框架从单纯的微信小程序开发,过渡到多端框架成为标配,进一步提升开发效率成为开发者的强烈需求。

风中追风 8262

微信小程序

微信小程序

ZiminLi的博客 1621

微信小程序商城开发实战指南:Android视角

微信小程序作为一种新型的应用形式,它摒弃了传统App从商店下载安装的模式,转而采用轻量级的网页技术,实现了无需下载安装即可使用的便捷性。其架构主要分为视图层(View)和逻辑层(AppService)两部分,利用微信内置的浏览器引擎,结合其专用的标记语言WXML、样式语言WXSS以及JavaScript进行编程。微信小程序提供了一系列的API接口,以便开发者完成各种功能的实现。基础API包括但不限于网络请求、数据存储、界面布局、媒体管理等方面。

weixin_33068055的博客 970

微信小程序开发实战:仿淘票票案例

微信小程序,作为一种创新的应用形态,使用户体验到了前所未有的便利。与传统APP相比,小程序无需下载安装,通过微信扫一扫或者搜索即可使用,大大减少了用户获取服务的门槛。由于微信的庞大用户基础,小程序的传播效率极高,能够在短时间内触达大量潜在用户。小程序不仅在获取和传播方面具有优势,在使用体验上也具备良好的流畅性和快捷性。开发者可以利用微信提供的开发工具和API,轻松构建功能丰富、界面友好的应用,而无需担心多平台兼容性和复杂的分发问题。

weixin_33622085的博客 875

微信小程序开发系列(二十)·wxml语法·setData()修改对象类型数据、ES6 提供的展开运算符、delete和rest的用法

根据以上我们可以发现,如果新增和修改都是用数据路径,要是新增和修改的数据量比较小的时候还能一个个敲上去,但是如果新增和修改的数据过多,每次都写数据路径就太过麻烦。

时光の尘的博客 1853

微信小程序开发实战:番茄时钟工具类应用源码解析

番茄时钟的核心状态包括:运行中、暂停、重置、完成等。我们可以使用枚举方式定义状态:状态切换逻辑如下:Page({data: {},} else {}, 1000);},});逻辑分析- 使用setData更新状态与时间。控制计时器运行。- 状态切换逻辑清晰,便于后续扩展。

weixin_35835030的博客 1143

原生小程序实现复杂对象的双向绑定(附代码可直接食用)

原生小程序实现复杂对象的双向绑定(附代码可直接食用)

GIN0913的博客 2310

微信小程序开发实战:奥多停车项目解析

本文还有配套的精品资源,点击获取 简介:微信小程序是腾讯公司推出的便捷移动应用平台,本项目通过奥多停车小程序的开发实践,详细讲解了小程序开发的关键技术点。包括环境搭建、框架理解、页面生命周期、数据绑定、API调用、组件化、样式布局、用户体验优化、真机调试与发布,以及持续迭代与维护。这些内容构成了学习和掌握微信小程序开发的完整流程。 1. 微信小程序开发环境搭建 ...

weixin_35886636的博客 1029

Chronos:学习时间序列的大语言模型(论文解读)

《Chronos:学习时间序列的大语言模型》论文翻译

qq_20144897的博客 9042

小程序开发基础6--对象的创建、内置对象Array的使用

一,对象的三种创建方式 利用字面量创建对象 利用new Object创建对象 利用构造函数创建对象 1.利用字面量创建对象 语法如下 var 对象名={ 属性名:属性值, 属性名:属性值, 方法名:function(){} } var Person = { name:'小香猪', age:18, code:function(){console.log('小香猪会写代码')} } 2.利用new Object创建对象 语法: var obj = new Object(); obj.name=‘编程

宋建国的博客 1455

海思方案定制hi3531dv200/SS528 DVR方案解析:从硬件选型到编解码实战应用

海思方案,Hi3518EV100,Hi3518CV100,Hi3515CV100,Hi3516CV100,Hi3516ECV100,Hi3516D,Hi3516A,Hi3519,Hi3520D,Hi3521A,Hi3535,Hi3531,Hi3536,Hi3536C,Hi3536D,Hi3518EV200,Hi3518EV201,Hi3520DV200,Hi3516CV200,Hi3516CV300,Hi3516AV200,Hi3520DV300,Hi3519V101,sd3403,hi3519av200

1584

微信小程序 vs 小游戏开发框架:核心技术差异全解析

微信小程序 vs 小游戏开发框架:核心技术差异全解析

laozhangguzhang的博客 3164

基于大疆TSDK与Pix4D的热红外数据工程化处理:从RJPG到温度正射影像的完整工作流

本文详细介绍了基于大疆TSDK与Pix4D的热红外数据工程化处理完整工作流。通过Python脚本自动化解析RJPG格式的热红外图像,提取并转换其中的原始辐射数据为包含真实温度信息的TIFF文件,再结合Pix4Dmapper进行批量拼接,最终生成可直接用于GIS分析的温度正射影像图。该流程解决了手动处理效率低下、参数校准复杂等难题,实现了从原始数据到定量分析成果的高效、准确、可重复生产。

weixin_29161785的博客 374

Zemax序列模式下激光二极管(LD)光源建模与像散校正实战

本文详细讲解了在Zemax序列模式下精确建立激光二极管(LD)光源模型并校正其像散的核心方法。通过将椭圆光束的发散角转换为渐晕系数,并巧妙利用理想柱面镜模拟像散,实现了对LD光源特性的高精度模拟。该方法特别适用于激光耦合、激光雷达等需要对像散光束进行精密控制的光学系统设计。

weixin_28455801的博客 435

微信小程序开发:数据绑定与事件处理

本文系统介绍了微信小程序开发中的数据绑定与事件处理核心概念。主要内容包括:1)数据绑定的三种形式(内容、属性、控制绑定)及Mustache语法运算功能;2)事件绑定机制与事件对象属性;3)通过data-*实现事件传参;4)使用setData()方法实现数据同步;5)条件渲染(wx:if/hidden)和列表渲染(wx:for)的实现方式及性能优化技巧。这些技术构成了小程序动态交互的基础,通过数据绑定使界面"活"起来,通过事件处理实现用户操作响应,是连接静态页面与动态功能的关键桥梁。

2401_89765726的博客 1014

从原理图到PCB:基于Allegro的8槽PXIe背板高速设计实战

本文详细介绍了基于Allegro软件进行8槽PXIe背板高速设计的完整实战流程。从理解规范、原理图设计、PCB布局规划,到高速PCIe差分对与精密时钟的布线艺术,再到电源与地处理以及最终的设计验证与生产文件输出,系统性地阐述了确保背板信号完整性、电源完整性和系统稳定性的关键技术与工程实践。

weixin_28312391的博客 202

微信小程序开发框架对比:Taro vs WePY vs mpvue

微信小程序开发框架对比:Taro vs WePY vs mpvue 本文深入对比分析了微信小程序三大主流开发框架Taro、WePY和mpvue的技术特点。从技术架构、编译原理、运行时机制、性能表现、多端支持能力等多个维度进行全面评估,为开发者提供详细的技术选型参考。文章通过详实的数据测试和深度技术分析,揭示了这三款框架在真实业务场景下的性能差异和兼容性表现,帮助开发者根据项目需求选择最适合的开发框...

gitblog_00286的博客 1028

3.1 快速启动Flink集群

在本实战中,我们将快速启动Apache Flink 1.13.0集群,并在Hadoop集群环境中提交作业。首先,我们会在本地下载Flink安装包并上传至云主机,解压并配置环境变量。接着,我们将启动Flink集群,通过访问Web UI进行监控管理。然后,我们会配置集群,将Flink分发到从节点,并在集群上提交作业。最后,我们将通过命令行提交作业,并在Web UI上查看任务节点的输出结果。这个过程涵盖了Flink集群的部署、配置和作业提交,为大数据处理提供了一个完整的实战经验。

howard2005的专栏 727

DICOM医学影像开发者必备工具清单

PyDicom 是一个纯 Python 实现的 DICOM 文件解析库,允许开发者读取、修改和写入 DICOM 文件。它无需依赖外部库,易于集成到现有的 Python 项目中,非常适合快速开发和原型设计。DCMTK(DICOM Toolkit)是一个由OFFIS开发的开源C++库,提供了一整套DICOM标准的实现,包括文件操作、网络通信和图像处理等功能。它是开发高性能DICOM应用的理想选择。MicroDICOM 是一款免费的DICOM查看器,适用于Windows平台。

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 577

横向比较微信小程序和vue的语法与结构差异,让你快速理解用法

不少前端开发估计长期使用vue框架进行前端开发,但不可避免会有特殊情况需要人手去接坑其它项目,而刚好那个项目是原生微信小程序项目怎么办???其实很简单,一对一对地与vue进行横向对比就行,通过这样的方式最多一个上午就能直接上去写页面了,本文主打一个简洁毕竟写的长编大论的看的都累,所以下面将说明: - 并且对小程序的目录结构进行简洁说明。 - 对vue和小程序语法进行横向对比。 - vue与小程序标签的差异。 - 父子传递

talentT的博客 2034

Google antigravity 不支持你所在地区?手把手教你把账号改成支持地区

Google antigravity功能火爆,但国内老账号根本用不了🤬本文分享几种有效的账号国家地区切换方法,最快几分钟就能让antigravity直接亮起🔥

XiaoqiangClub的博客 2万+

php hidden属性,微信小程序关于组件的hidden属性的使用建议

1,先看一个作者的实验微信官方文档里有提到,hidden是所有组件都有的属性,在实际编码中发现,它的表现与描述不能完全想符。例如如下布局:你会发现hidden没生效。经实验发现hidden元素对块状布局才生效,所以这段代码里导致hidden没生效的罪魁祸首是display:flex,把这个去掉就可以了。为了验证作者说的话,我翻了css文档,一一实践了所有display样式可能的值:值 描述n...

weixin_39773239的博客 383

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

微信小程序与支付宝小程序差异之组件与api

微信小程序与支付宝小程序大部分人都基本相同,只是在部分的时间名称,少部分api返回的数据结构上存在差异,在这里我总结了部分比较常见的差异。继续往下看! 组件差异——image 在微信小程序中,image组件中,可以嵌套组件,用绝对定位可以展示出来,也可以放cover-view。 在支付宝小程序中,image中不管嵌套什么组件都显示不出来。期望官方后面会支持。   组件差异——cove...

大梦的博客 2307

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

uniApp+Vue3+Vite微信小程序开发指南

App.vue是uni-app的主组件,所有页面都是在App.vue下进行切换的,是页面入口文件。微信开发者工具:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html。可查阅官方文档:https://vue-macros.dev/features/reactivity-transform.html。webstorm 下载地址:https://www.jetbrains.com/webstorm/

青柠豆腐 8468

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 优雅的用户体验:微信小程序中的多步骤表单引导
下一篇: 简洁实用的按钮提交逻辑:构建智能交互体验
水星记_
水星记_ 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域
博客等级 码龄6年 13万+粉丝 212原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水星记_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值