使用Vue的限制
beforeCreate
vue lifecycle 的 beforeCreate
hook 不可以使用
Date 类型数据无法传值
created中不可以做同步this.data修改
export default {
data() {
return {
foo: 'bar'
};
},
created() {
this.foo = 'newVal'; // 这样不可以
bl.request({
success() {
this.foo = 'newVal'; // 这样可以
}
});
}
}
$refs
不要使用$refs去获取dom相关属性,如width等。可获取组件下面的方法
BOM,DOM
小程序没有BOM,DOM概念,因此不要使用window,document等对象,相关方法也都没有(除了setTimeout, setInterval, console等),若要获取元素相关dom属性,可参考 SelectorQuery。
尽量不要引额外的npm包
除非保证包里不涉及到bom,dom等会造成小程序页面报错的逻辑,否则不要引入。
touchmove
touchmove事件,event对象中不包含preventDefault等一切方法,可使用vue的@touchmove.prevent代替。event对象中目前没有touches,只有targetTouches。
视图数据不更新可能的原因
1.一定要在data里声明该数据。
2.给data里某个对象(包括数组)新增加key时最好使用 Vue.set(或vm.$set)。
3.click等事件里应避免传对象,在方法内修改此对象不会更新到视图上(emit是可以的)。
4.对prop(初始值为对象A)赋值一个对象B(挂载在data下),对象B数据更新也会有问题,避免给prop赋值对象。
5.视图上:{{methodA('a')}} ,其中methodA在method里定义,返回永远undefined,不支持这种写法。
6.同3,在filters,computed里调用methods里的方法,可以正确执行,但是返回结果永远为undefined。
建议
某个js文件的全局对象export并赋值到某个vue文件的data下,会引发内存泄漏的问题,可使用Object.assign({}, obj)赋值给data的方式解决。
import systemInfo from 'xxx.js';
export default {
data() {
return {
systemInfo: Object.assign({}, systemInfo)
};
}
}