本文摘自PHP中文网,作者不言,侵删。
本篇文章给大家带来的内容是关于使用Proxy实现双向绑定的方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。前言:vue3.0要用Proxy来实现双向绑定,因此先来尝试一下实现方法。
1 Object.defineProperty 实现
原来vue2的实现使用Object.defineProperty,监听set,但对于数组直接下标给数组设置值监听不了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function observe(data) {
if (!data || typeof data !== 'object' ) {
return ;
}
Object.keys(data).forEach( function (key) {
defineReactive(data, key, data[key]);
});
};
function defineReactive(data, key, val) {
observe(val);
Object.defineProperty(data, key, {
enumerable: true,
configurable: false,
get: function () {
return val;
},
set: function (newVal) {
console.log( '-------通知订阅者--------' )
val = newVal;
}
});
}
|
2 使用Proxy实现
使用Proxy实现原理主要是new一个Proxy对象,代理你的data值,需要注意的一点是,对于数组的方法操作来说,会产生两次赋值操作,一次是添加值,一次是改变他的length值,而对于Object.defineProperty监听不到的数组下标给数组设置值,Proxy是可以监听到的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | function observe(data) {
if (!data || typeof data !== 'object' ) {
return ;
}
Object.keys(data).forEach( function (_k) {
if (data[_k] && typeof data[_k] === 'object' ) {
data[_k] = defineReactive(data[_k]);
}
});
}
function defineReactive(data) {
return new Proxy(data, {
set(target, key, value, proxy) {
if (
Object.prototype.toString.call(data) === "[object Array]" &&
key === "length"
) {
Reflect.set(target, key, value, proxy);
return true;
}
observe(data);
Reflect.set(target, key, value, proxy);
console.log( '-------通知订阅者--------' )
return true;
}
});
|
本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript教程视频栏目!
以上就是使用Proxy实现双向绑定的方法介绍(代码)的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
如何更新javascript中的cookie?(代码示例)
javascript有什么优点
javascript也用import吗
使用vue.js需要注意什么
javascript怎么开启
java与javascript的区别有哪些
javascript中如何判断函数、变量是否存在
javascript分号规则的知识介绍(附示例)
javascript怎么去除小数点后的数
vue.js中如何运行项目
更多相关阅读请进入《javascript》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » 使用Proxy实现双向绑定的方法介绍(代码)