收藏
回答

关于setData的使用

第一种:

this.data.userName = "admin";

this.setData(this.data);


第二种:

this.setData({

    userName : 'admin'

});


请问这两种方式有区别吗?


回答关注问题邀请回答
收藏

6 个回答

  • GJ
    GJ
    2017-10-31

    我可以

    var obj;

    obj['userName'] = e.detail.value;

    this.setData(obj);


    也可以

    var userName = e.detail.value;

    this.setData({userName});


    这两个都可以出现效果

    2017-10-31
    有用
    回复
  • 平风
    平风
    2017-10-31

    是“有效果”,还是“没有效果”?

    如果你的问题是为什么没有效果,我的解释是:

    setData期望的值是一个对象。如果e.detail.value的值是一个对象,即{},你值入的值是{{}},解释器无法理解;如果e.detail.value是一个简单类型(字符串),你值入的值是{string},也是错的(对象缺少键名)。

    正确的写法:

    1. userName是对象:this.setData(userName);

    2. userName是字符串: this.setData({userName: userName});

    2017-10-31
    有用
    回复
  • GJ
    GJ
    2017-10-24

    这是我的这个页面的data

    /**

      * 页面的初始数据

      */

    data: {

    userName : null

    },


    bindinput事件中这么写,有效果,这是为什么

    var userName = e.detail.value;


    this.setData({userName});


    2017-10-24
    有用
    回复
  • 平风
    平风
    2017-10-20

    // 根据属性名设置的方法(不知道你要找的是不是这个,送你了,不谢):

    var params = [ ];

    params[propertyName] = val;

    this.setData(params);


    2017-10-20
    有用
    回复
  • GJ
    GJ
    2017-10-20

    主要是想封装一个input的template,左中右分别为label标签,input框,后缀单位。

    使用bindinput事件,所以我得传一个方法进去。

    不能写死,但输入的值得放在this.data的某个属性里面,所以设计了一个data-bind-property传入这个属性的名字,

    就找到了第一种写法,第二种方法不知如何实现

    2017-10-20
    有用
    回复
  • 平风
    平风
    2017-10-20

    只有一个属性时两者应该没什么区别,如果this.data属性较多时,推荐使用第二种方法局部更新。虽然不了解小程序内部的渲染机制,但只渲染需要变更部分的思想是没错的,开发中还是尽量只提交需要重新渲染的数据部分。

    2017-10-20
    有用
    回复
登录 后发表内容