关于全局重写setData
目标效果,
在不单独引用的前提下,能够通过this.setData({},()=> { // 同时还能有类似回调函数的效果 });
已成功,代码如下
function(obj) {
let that = this,
keys = [],
val,data,
b = Object.keys(obj);
return new Promise((resolve, reject)=> {
let havSetedNum = 0; // 已经修改过视图值的数量
Object.keys(obj).forEach((key)=> {
keys = key.split('.');
val = obj[key];
data = that.$data;
that.$set(data,key,val);
havSetedNum++;
});
console.log('b is', b);
console.log('havSetedNum is', havSetedNum);
if(havSetedNum == b.length) { // 模拟回调
resolve(true);
}
})
}
该方法要写在main.js文件里
如下写法即可
Vue.prototype.setData = function(obj) {...}
然后就可在功能页面上如下调用
原理也很简单,既是对$set进行封装,利用Object.keys().forEach进行数据便利,使其具有批量更新能力。
同时加了一层Promise,通过比较传入的对象数量 以及 $set()了的对象数量,来模拟出一个回调函数,为后续链式功能提供位置,避免异步。
tips: 只是简单的封装了一下,路过的各位大佬若有高见,欢迎指点哈~