数据类型
- vue组件中data必须是函数 data(){return{}},new Vue中的选项可以是函数也可以是对象
- 小程序中data都是对象
初始化数据,添加响应式属性
- vue会在初始化实例的时候,遍历data中的所有属性,使用Object.defineProperty把这些属性都转成getter/setter,给他们添加响应式。
- 小程序不会
设置属性
- 由于添加了响应式,更改数据的话可以直接this.data.name='xx',对于动态新增的数据,就要用
- 对象可以用
this.$set(this.data.someObject,'b',2),
或者重新赋值,或者
this.$delete(this.data.someObject,propertyName)
- 数组可以直接用新的值重新赋值,或者this.$set,或者pop,push,shift,unshift,reverse,sort,splice,
- 小程序统统都是this.setData中去赋值,对于数组中的子元素可以this.setData({['list[0]']:newValue}),也可以'obj.propertyName':newValue
Vue.set是为了给动态新增的数据增加响应式,这样才能更新到视图上(使用 Object.defineProperty 把这些属性全部转为 getter/setter),直接改的话也能在数据中更新成功,但视图不会有变化
data是个原型链上的函数,在构造函数的时候,将
return{
_data:...this.data(),
...this,
...this.data(),
},
使得每个实例都有自己的作用域,当操作this.data.obj.name='123'的时候,等同于this.data().obj.name='123'.
微信小程序中是将data对象作为原型上的_freeData对象保存,就像vue中的$data,执行构造函数的时候再去给每个实例开辟空间
在vue中,this.data.name='aaaa',是可以更新到视图的,小程序中不行
vue,写在data中的数据都添加了响应式属性,进行了监听处理,如果事后要新增的话,只能用Vue.set方法
小程序中,没有对data中的数据添加响应式属性,所以就算data中写不全,也没关系,要更新视图的话用
this.setData方法,一次性为这些属性渲染到视图上
网友评论