关于setData的使用
发布于 6 年前 作者 huangping 11464 次浏览 来自 问答

第一种:

this.data.userName = “admin”;

this.setData(this.data);

第二种:

this.setData({

    userName : ‘admin’

});

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

6 回复

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

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

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

正确的写法:

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

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

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

var params = [ ];

params[propertyName] = val;

this.setData(params);

我可以

var obj;

obj[‘userName’] = e.detail.value;

this.setData(obj);

也可以

var userName = e.detail.value;

this.setData({userName});

这两个都可以出现效果

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

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

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

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

这是我的这个页面的data

/**

  * 页面的初始数据

  */

data: {

userName : null

},

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

var userName = e.detail.value;

this.setData({userName});

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

回到顶部