收藏
评论

微信小程序setData中键名key中使用变量

setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步).setData中可以传入的参数Object 以 key: value 的形式表示,将 this.data 中的 key 对应的值改变成 value。其中 key 可以以数据路径的形式给出,支持改变数组中的某一项或对象的某个属性,有时我们需要在使用变量表示key,这时应该如何操作呢.

问题描述:

例一:

 


idNum传过去,直接是data中多了一个'idNum'的数据,不是动态的id数值.

例二:

 


无法改变introState的值,因为videoArrayIndex没有被解析为序列号.

解决办法:

一. 用一个空对象暂存

 


使用一个中间对象暂存解决上述例二

 


二. 使用es6新特性

ES6允许声明在对象字面量时使用简写语法,来初始化属性变量和函数的定义方法,并且允许在对象属性中进行计算操作:

 


使用es6新特性解决上述例二

 



更多分享请移步我的个人博客: https://tianxintiandisheng.github.io/


收藏

2 个评论

  • 鸡鸡鸡镜。
    鸡鸡鸡镜。
    2018-08-30

    其实还可以:

    changeIntro(event) {

          let videoArrayIndex = event.target.dataset.index;


          let introState = `videoArray[${videoArrayIndex}].introState`;
          this.setData({
              [introState] : true,
          })
      }
    2018-08-30
    赞同 2
    回复 3
    • 天心天地生
      天心天地生
      2018-08-30

      嗯,用了es6的字符串扩展语法。不过es6语法会在某些iPhone6上报错,还是谨慎使用。

      2018-08-30
      1
      回复
    • 鸡鸡鸡镜。
      鸡鸡鸡镜。
      2018-08-31回复天心天地生

      是低版本的ios导致?

      2018-08-31
      1
      回复
    • 天心天地生
      天心天地生
      2018-08-31回复鸡鸡鸡镜。

      不是版本问题,在7和6p中出现报错较为频繁,代码直接无法执行.

      2018-08-31
      2
      回复
  • 闫昌盛
    闫昌盛
    2021-02-01

    那怎么取值呢? this.data.[key] 这样吗?

    2021-02-01
    赞同
    回复
登录 后发表内容