代码拉取完成,页面将自动刷新
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p id="oP"></p>
<input id="oInput" type="text">
<script>
// 需求:双向数据绑定(数据变了,视图改变;视图改变,数据也变)
const data = {
name: 'ifer',
address: '北京',
};
/* const tempData = { ...data }
Object.keys(data).forEach(key => {
Object.defineProperty(data, key, {
get() {
return tempData[key]
},
set(newValue) {
tempData[key] = newValue
oP.innerHTML = newValue
oInput.value = newValue
}
})
})
oInput.oninput = function (e) {
data.address = e.target.value
} */
// 上面 Vue2 的问题:如果 data 里面有 100 个属性,那可不是要循环 100 次吗?
// p 就是一个代理,我对 p 的任何操作都会影响到 data
const p = new Proxy(data, {
get(target, attr) {
// 获取的时候触发
// console.log(target, attr)
// target => data
// attr => 属性
return target[attr]
},
set(target, attr, newValue) {
target[attr] = newValue
oP.innerHTML = newValue
oInput.value = newValue
}
})
// p.name = 'xxx'
// console.log(data.name);
/* p.name = 'xxx'
console.log(p.name) */
oInput.oninput = function (e) {
// p.address = e.target.value
p.test = e.target.value
};
</script>
</body>
</html>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。