收藏
回答

小程序如何设置data的值

问题模块
开发者工具
data: {
    cart: {
        "1": {
            "count": 1,
            "total": 1,
            "list": {
                "3": 1
            }
        }
    }}

比如要设置"3":1为"3":2要如何设置呢?

"1"和"3"是动态改变的,要用变量代替哦。

最后一次编辑于  2017-07-26  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

12 个回答

  • 铭锋科技
    铭锋科技
    2017-07-26

    10年淘宝开放平台见过的

    2017-07-26
    赞同
    回复
  • maq
    maq
    2017-07-26

    @铭锋科技: 是的。见过?  ^_^

    2017-07-26
    赞同
    回复
  • 铭锋科技
    铭锋科技
    2017-07-26

    maq128吧

    2017-07-26
    赞同
    回复
  • Andy
    Andy
    2017-07-26

    var idx = 3;

    var newData={};

    newData['cart[1].list[' + idx + ']']=2;


    page.setData(newData);


    这样也行的吧

    2017-07-26
    赞同
    回复
  • Mr.J
    Mr.J
    2017-07-26

    不错,我也学习了

    2017-07-26
    赞同
    回复
  • 蓦然回首
    蓦然回首
    2017-07-26

    刚刚测量了一下,maq的方法也是可以的,而且比整体斌值的方法更好用,感谢maq

    2017-07-26
    赞同
    回复
  • maq
    maq
    2017-07-26

    3 楼的写法肯定是可以的。如果说有什么不足之处的话,就是他把整个数据对象都重新赋值了一遍,这样有可能会波及很多“无辜”的数据项,导致重新渲染的负担变大。当然如果涉及的渲染内容不是很多的话问题并不明显。


    我在 4 楼给出的代码是我刚刚在开发者工具里跑通的,如果你那里跑不通的话,我也不知道是哪里的问题了。

    2017-07-26
    赞同
    回复
  • 蓦然回首
    蓦然回首
    2017-07-26

    我把键值1改成a1以后,Mr.J的整体斌值方法是可行的。maq的方法我之前都有测试过多遍,变通过几次都是不行的,可能是哪里有疏忽了。谢谢各位热心回答。

    2017-07-26
    赞同
    回复
  • maq
    maq
    2017-07-26

    前面给的代码确实不能直接用,应该这样写:

    var idx = 3;
    page.setData({
        ['cart[1].list[' + idx + ']']: 2
    });

    问题出在你用数字作为属性名,这个在 js 语法本身是可以的,但在小程序 setData 的属性描述时就不行了,数字型的属性名必须用数组下标的方式写。


    BTW: 如果你提问题的时候直接把你试过不行的方法说出来,就能避免耽误别人的时间了。我在 2 楼的回答其实要点在于提醒你用方括号的形式可以支持表达式作属性名,你在原帖中特别提到属性名是动态的,因为这个不常见,以为你不知道,所以专门说一下。如果早说你知道这种写法,甚至直接给出你原本的写法,我就可以直接帮你找出错误点了。

    2017-07-26
    赞同
    回复
  • Mr.J
    Mr.J
    2017-07-26
    var cart = this.data.cart;
    var idx = 3;
    cart.1.list[idx] = 2;
    this.setData({
        cart: cart
    })


    2017-07-26
    赞同
    回复

正在加载...