收藏
回答

data中的数据没有通过setData()来绑定,但是data中的值确发生了改变

问题模块
API和组件


下面是同事写的一个小demo,Page.test()是一个bindtap点击事件

Page({
   data: {
       test:[{
           a:[],
           b:[]
       }]
   },
   test: function () {
       var that =this;
       var arr=that.data.test;
       console.log(that.data.test)
       arr.a=[0,1,2]
   }
})


代码中没有出现setData(),只是进行了赋值。当执行到arr.a=[0,1,2]的时候,console.log(that.data.test)是没有执行的,当arr.a=[0,1,2]完成的时候,console.log(that.data.test)才会执行,而打印出来的值缺如下图:



我在文档中并没有查找到相关描述,不知是不是小程序的一个坑。

最后一次编辑于  2017-12-02
回答关注问题邀请回答
收藏

3 个回答

  • 这都申请了
    这都申请了
    2017-12-02

    是的,这种情况只能想到是操作了指针或引用一类的东西了,setdata应该是变量赋值+render

    2017-12-02
    赞同
    回复
  • Siegfried
    Siegfried
    2017-12-02

    页面确实没有渲染,也就是说,setData其实并不是给data赋值的方法,而是对渲染页面的方法,而data则是类似C语言中的指针。

    但是如果是把arr.a=[0,1,2]改成arr=[0,1,2],就不会出现上述的情况

    2017-12-02
    赞同
    回复
  • 这都申请了
    这都申请了
    2017-12-02

    确实这样,但是页面并不会渲染,只有调用setdata页面才会渲染,不知道是否有意为之,现在这种情况,可以直接赋值,但是又不影响页面展示的内容

    2017-12-02
    赞同
    回复