<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<input type="text" v-mode="msg" />
<p v-mode="msg"></p>
<script>
const data = {
msg: "你好",
};
const input = document.querySelector("input");
const p = document.querySelector("p");
input.value = data.msg;
p.innerHTML = data.msg;
//(1)以input为例:当输入发生变化之后,input事件会监听到输入从而调用回调函数
//从而给data.msg赋值,这是视图到数据方向的数据绑定
input.addEventListener("input", function () {
data.msg = input.value;
});
//(2)由于Object.defineProperty()方法定义了data.msg的set和get方法,
//每当使用data.msg给msg赋值的时候会调用set方法给input.value赋值
//从而更新了视图,这是数据到视图方向的绑定
// (1)(2)结合起来就是双向绑定了
let temp = data.msg;
Object.defineProperty(data, "msg", {
get() {
return temp;
},
set(value) {
temp = value;
//视图修改
input.value = temp;
p.innerHTML = temp;
},
});
data.msg = "小李";
</script>
</body>
</html>