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

目录

1.  新增单个、多个属性

1.1  新增单个属性 

1.2  新增多个属性

2.  修改单个、多个属性

2.1  修改单个属性

2.2  修改多个属性

3.  优化

3.1  ES6 提供的展开运算符

3.2  Object.assign()将多个对象合并为一个对象

4.  删除单个、多个属性

4.1  删除单个属性

4.2  删除多个属性


1.  新增单个、多个属性

        找到cate.js文件,在其中创建一个空对象“userInfo”:

  data:{
    num: 1,
    userInfo: {}
  },

1.1  新增单个属性 

      找到cate.wxml文件,创建一个路径并且创建一个按钮,用于修改对象类型数据:

//创建一条线用于区分
<view class="line"></view>

<view>{{ userInfo.name }}</view>

<button type="warn" bind:tap="updateUserInfo">修改对象类型数据</button>

        找到cate.js文件,定义事件处理函数,首先给对象新增一个属性:

    // 新增单个
    this.setData({
      // 如果给对象新增属性,可以将Key写成数据路径的方式 a.b.c 
      'userInfo.name':'tom'
    })

        此时点击“修改对象类型数据”按钮,会弹出“tom”属性:

1.2  新增多个属性

        找到cate.wxml文件,在创建一个路径:


<view>{{ num }}</view>
<button bind:tap="updateNum">更新 num</button>

<view class="line"></view>

<view>{{ userInfo.name }}</view>
<view>{{ userInfo.age }}</view>
<button type="warn" bind:tap="updateUserInfo">修改对象类型数据</button>

         找到cate.js文件,定义事件处理函数,要想新增多个属性,创建多个路径就可以:


Page({

  data:{
    num: 1,
    userInfo: {}
  },

  // 更新 num
  updateNum(){

  // 获取数据
  // console.log(this.data.num)

  // 通过赋值的方式直接修改数据
  // this.data.num += 1
  // console.log(this.data.num)
  //能够修改数据,但是不能改变页面上的数据

  // setData()方法有两个作用:
  // 1.  更新数据
  // 2.  驱动视图更新
  this.setData({
    // key:是需要更新的数据
    // value:是最新的值
    num: this.data.num + 1   
  })
  console.log(this.data.num)
  },

  //更新 userInfo
  updateUserInfo(){

    // 新增单个、多个属性
    this.setData({
      // 如果给对象新增属性,可以将Key写成数据路径的方式 a.b.c 
      'userInfo.name':'tom',
      'userInfo.age':10
    })
  }
}) 

        此时点击“修改对象类型数据”按钮,会弹出“tom”和“10”的属性: 

2.  修改单个、多个属性

2.1  修改单个属性

        找到cate.js文件,在data中给userInfo赋初始属性:

  data:{
    num: 1,
    userInfo: {
      name:'tom',
      age:'10'
    }
  },

        修改属性仍可以使用this.setData进行修改:

    // 修改单个
    this.setData({
      // 如果需要修改对象属性,可以将Key写成数据路径的方式 a.b.c 
      'userInfo.name':'jerry'
    })

         此时点击“修改对象类型数据”按钮,会发现“tom”属性修改为“jerry”:

2.2  修改多个属性

        修改多个属性和新增多个属性相似,也是需要创建多个路径,对路径进行修改:

    // 修改单个、多个属性
    this.setData({
      // 如果需要修改对象属性,可以将Key写成数据路径的方式 a.b.c 
      'userInfo.name':'jerry',
      'userInfo.age':20
    })

        此时点击“修改对象类型数据”按钮,会发现“tom”属性修改为“jerry”,“10”属性修改为“20”:

3.  优化

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

3.1  ES6 提供的展开运算符

        ES6 提供的展开运算符,通过展开运算符能够将对象中的属性复制给另一个对象,后面的属性会覆盖前面的属性:

    // ES6 提供的展开运算符
    // 通过展开运算符能够将对象中的属性复制给另一个对象
    // 后面的属性会覆盖前面的属性
    const userInfo = {
      ...this.data.userInfo,
      name:'jerry',
      age:18
    }

    this.setData({
      userInfo
    })

        通过在const对userInfo的值进行修改覆盖,在通过this操作使const中的userInfo复制给data里的userInfo实现属性的修改:

        此时点击“修改对象类型数据”按钮,会发现“tom”属性修改为“jerry”,“10”属性修改为“18”:

3.2  Object.assign()将多个对象合并为一个对象

        从后往前合并,若是遇到相同属性,以后面的为准:

    // Object.assign()将多个对象合并为一个对象
    // 从后往前合并,若是遇到相同属性,以后面的为准
    const userInfo = Object.assign(this.data.userInfo, { name:'jerry'},{ name:'Lihua'},{ age:18 })
    this.setData({
      userInfo
    })

        例如:我们创建两个“name”,属性:

        此时点击“修改对象类型数据”按钮,会发现“tom”属性修改为“Lihua”,“10”属性修改为“18”:

4.  删除单个、多个属性

4.1  删除单个属性

        使用“delete”进行删除属性:

    delete this.data.userInfo.age

         不过,此时点击“修改对象类型数据”按钮,会发现页面数据并没有消失:

        我们可以使用:

    console.log(this.data.userInfo)

        来打印输出数据,会发现此时已将“age”属性删除,但是页面上未进行更改:

        根据以上我们可以发现此时数据只有“name”的属性,那么我们可以将删除完的数据直接复制给userIfo,让其进行显示:

    delete this.data.userInfo.age
    // console.log(this.data.userInfo)
    this.setData({
      userInfo: this.data.userInfo
    })

        此时点击“修改对象类型数据”按钮,会发现页面数据“age”已经删除:

4.2  删除多个属性

        删除多个属性可以采用 rest 剩余参数。

        此时数据有些少,我们可以先找到“data”在其中在加入一个属性:

  data:{
    num: 1,
    userInfo: {
      name:'tom',
      age:10,
      test:111
    }
  },

         要想使其在页面显示,需要再找到cate.wxml文件,编写代码:

<view>{{ userInfo.test }}</view>

      使用rest:

    // 删除多个属性
    // 剩余属性保存在rest
    const { age,test, ...rest  } = this.data.userInfo
    this.setData({
      userInfo: rest
    })  

        此时点击“修改对象类型数据”按钮,会发现此时只有“name”保留:

微信小程序开发_时光の尘的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/448513.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 热题 100_旋转图像

题解一&#xff1a; 翻转数组&#xff1a;先将数组沿右上-左下对角线翻转&#xff0c;再将数组上下翻转。 class Solution {public void rotate(int[][] matrix) {int n matrix.length;for (int i 0; i < n; i) {//沿右上-左下对角线翻转for (int j 0; j < n - i - 1…

Corel会声会影视频编辑软件英文名是Corel VideoStudio2023

Corel会声会影视频编辑软件英文名是Corel VideoStudio2023&#xff0c;可以抓取、编制和导出多种常见的视频格式。介绍整理从早期的会声会影9、会声会影10后到会声会影X系列版本包括X2、X3、X4、X5、X6、X7、X8、X9、X10&#xff0c;2018&#xff0c;2019&#xff0c;2020&…

分布式之Ribbon使用以及原理

Ribbon使用以及原理 1、负载均衡的两种方式 服务器端负载均衡 传统的方式前端发送请求会到我们的的nginx上去&#xff0c;nginx作为反向代理&#xff0c;然后路由给后端的服务器&#xff0c;由于负载均衡算法是nginx提供的&#xff0c;而nginx是部署到服务器端的&#xff0c;所…

动态代理以及Retrofit的原理

代理模式&#xff09; 首先什么是代理模式&#xff1f; 代理模式就是通过引入代理对象去帮助真实对象完成一些事情&#xff0c;防止直接访问目标对象给系统带来不必要的复杂性。 代理模式一般分为三个角色&#xff1a; 抽象角色&#xff1a; 指代理对象和真实对象对外提供的…

YOLOv8_pose-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…

数据结构--链表和递归

前面我们所学习的线性数据结构 1、动态数组 2、栈 3、队列 它们的底层都是依托于静态的数组所实现&#xff1a;靠resize解决固定容量的问题 一、链表 1、链表&#xff1a;真正的动态数据结构 优点&#xff1a;不需要处理固定容量的问题&#xff0c;是真正的动态数据结构 …

【leetcode C++】最小栈

leetcode 155. 最小栈 题目 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获…

2024.3.11

作业&#xff1a; #include <iostream> #include<iomanip> #include<string> using namespace std;int main() {string str; // array<char,128> a; // array<char,128>::iterator iter;cout << "请输入一个字符串:" <…

位运算#蓝桥杯

位运算#蓝桥杯 文章目录 位运算#蓝桥杯1、小蓝学位运算2、异或森林3、位移4、笨笨的机器人5、博弈论 1、小蓝学位运算 #include<bits/stdc.h> using namespace std; using LL long long; const LL N 1e97; template<int kcz> struct ModInt { #define T (*this)…

HubSpot和NETFARMER是什么关系?

HubSpot和NETFARMER之间的关系是合作伙伴关系&#xff0c;特别是在亚太地区。NETFARMER作为HubSpot的合作伙伴&#xff0c;专注于帮助企业在海外市场获得更多客户&#xff0c;实现业务增长和成功。 NETFARMER具备丰富的经验和专业的营销团队&#xff0c;他们深入了解亚太地区各…

如何在Linux使用Docker部署Firefox并实现无公网IP访问本地浏览器

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器&#xff0c;由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…

YOLOv7_pose-Openvino和ONNXRuntime推理【CPU】

1 环境&#xff1a; CPU&#xff1a;i5-12500 Python&#xff1a;3.8.18 2 安装Openvino和ONNXRuntime 2.1 Openvino简介 Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包&#xff0c;主要用于对深度推理做优化。 Openvino内部集成了Opencv、Tens…

STM32串口:DMA空闲中断实现接收不定长数据(基于HAL库)

STM32串口&#xff1a;DMA空闲中断实现接收不定长数据&#xff08;基于HAL库&#xff09;&#xff1a; 第一步&#xff1a;设置rcc&#xff0c;时钟频率&#xff0c;下载方式 设置system core->RCC如图所示&#xff1a;&#xff08;即High Speed Clock和Low Speed Clock都选…

【企业动态】国际知名设备商来访东胜物联,考察交流

本周&#xff0c;国际知名设备商的技术及生产团队一行莅临东胜物联杭州总部和湖州生产工厂&#xff0c;进行参观考察&#xff0c;深入交流。该设备商的业务范围广泛&#xff0c;在全球各地拥有许多分公司&#xff0c;其中机器人和工业自动化设备等多项业务处于业界领先水平。 …

设计模式深度解析:工厂方法模式与抽象工厂模式的深度对比

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 探索设计模式的魅力&#xff1a;工厂方法模式文章浏览阅读17k次&#xff0c;点赞105次&#xff0…

【棘手问题】Spring JPA一级缓存导致获取不到数据库表中的最新数据,对象地址不发生改变

【棘手问题】Spring JPA一级缓存导致获取不到数据库表中的最新数据&#xff0c;对象地址不发生改变 一、问题背景二、解决步骤2.1 debug2.2 原因分析2.2.1 数据步骤2.2.2 大模型解释2.2.3 解释举例2.2.4 关键函数 2.3 解决方案 三、Spring JPA一级缓存 一、问题背景 项目的数据…

CubeMX使用教程(5)——定时器PWM输出

本篇我们将利用CubeMX产生频率固定、占空比可调的两路PWM信号输出 例如PA6引脚输出100Hz的PWM&#xff1b;PA7引脚输出500Hz的PWM&#xff0c;双路同时输出 我们还是利用上一章定时器中断的工程进行学习&#xff0c;这样比较方便 首先打开CubeMX对PA6、PA7进行GPIO配置 注&a…

Python递归函数你用对了吗?

1.递归函数 递归函数&#xff1a;函数自己调用自己 2.需求 使用函数的方式&#xff0c;计算数字n的阶乘 # 5&#xff01; """ 5! 1 * 2 * 3 * 4 * 5 4! 1 * 2 * 3 * 4 3! 1 * 2 * 3 2! 1 * 2 1! 1综上可以总结出&#xff1a;n! n * (n - 1) "&qu…

Spring Cloud部署篇2——Docker Compose部署至CentOS云服务器

一、项目介绍 系统模块 com.mingink |--mingink-api // 接口模块 | └──mingink-api-system // 系统接口 |--mingink-common // 通用模块 | └──mingink-common-core // 系统接口 |--mingink-gateway…

Mybatis操作sql报错ibatis.binding.BindingException: Parameter ‘empId‘ not found.

你们好&#xff0c;我是金金金。 场景 在使用Mybatis操作sql语句过程当中&#xff0c;更新操作&#xff0c;报错信息如下&#xff1a;Caused by: org.apache.ibatis.binding.BindingException: Parameter ‘empId’ not found. Available parameters are [arg1, arg0, param1, …