0%

自己动手实现系列 ---- Vue双向绑定

Vue 2.x 的 Object.defineProperty 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 数据
const data = {
text: 'default'
};
const input = document.getElementById('input');
const span = document.getElementById('span');

// 数据劫持
Object.defineProperty(data, 'text', {
// 数据变化 —> 修改视图
set(newVal) {
input.value = newVal;
span.innerHTML = newVal;
}
});

// 视图更改 --> 数据变化
input.addEventListener('keyup', function(e) {
data.text = e.target.value;
});

Vue 3.x 的 proxy 版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 数据
const data = {
text: 'default'
};
const input = document.getElementById('input');
const span = document.getElementById('span');

// 数据劫持
const handler = {
set(target, key, value) {
target[key] = value;
// 数据变化 —> 修改视图
input.value = value;
span.innerHTML = value;
return value;
}
};
const proxy = new Proxy(data, handler);

// 视图更改 --> 数据变化
input.addEventListener('keyup', function(e) {
proxy.text = e.target.value;
});
如果觉得不错请支持作者
------ 版权声明 ------

本文标题:自己动手实现系列 ---- Vue双向绑定

文章作者:

发布时间:2020年03月24日 - 15:40

最后更新:2020年04月02日 - 03:20

原始链接:https://blog.lifesli.com/2020/03/24/do-it-yourselfery-%E5%8F%8C%E5%90%91%E7%BB%91%E5%AE%9A/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。