數(shù)據(jù)類型
- vue組件中data必須是函數(shù) data(){return{}},new Vue中的選項可以是函數(shù)也可以是對象
- 小程序中data都是對象
初始化數(shù)據(jù),添加響應式屬性
- vue會在初始化實例的時候翅睛,遍歷data中的所有屬性声搁,使用Object.defineProperty把這些屬性都轉成getter/setter,給他們添加響應式捕发。
- 小程序不會
設置屬性
- 由于添加了響應式疏旨,更改數(shù)據(jù)的話可以直接this.data.name='xx',對于動態(tài)新增的數(shù)據(jù),就要用
- 對象可以用
this.$set(this.data.someObject,'b',2),
或者重新賦值扎酷,或者
this.$delete(this.data.someObject,propertyName)
- 數(shù)組可以直接用新的值重新賦值檐涝,或者this.$set,或者pop,push,shift,unshift,reverse,sort,splice,
- 小程序統(tǒng)統(tǒng)都是this.setData中去賦值,對于數(shù)組中的子元素可以this.setData({['list[0]']:newValue}),也可以'obj.propertyName':newValue
Vue.set是為了給動態(tài)新增的數(shù)據(jù)增加響應式,這樣才能更新到視圖上(使用 Object.defineProperty 把這些屬性全部轉為 getter/setter)法挨,直接改的話也能在數(shù)據(jù)中更新成功谁榜,但視圖不會有變化
data是個原型鏈上的函數(shù),在構造函數(shù)的時候凡纳,將
return{
_data:...this.data(),
...this,
...this.data(),
}窃植,
使得每個實例都有自己的作用域,當操作this.data.obj.name='123'的時候,等同于this.data().obj.name='123'.
微信小程序中是將data對象作為原型上的_freeData對象保存荐糜,就像vue中的$data,執(zhí)行構造函數(shù)的時候再去給每個實例開辟空間
在vue中巷怜,this.data.name='aaaa',是可以更新到視圖的暴氏,小程序中不行
vue,寫在data中的數(shù)據(jù)都添加了響應式屬性延塑,進行了監(jiān)聽處理,如果事后要新增的話答渔,只能用Vue.set方法
小程序中页畦,沒有對data中的數(shù)據(jù)添加響應式屬性,所以就算data中寫不全研儒,也沒關系,要更新視圖的話用
this.setData方法独令,一次性為這些屬性渲染到視圖上