我们用原生的js模拟其底层原理:
<!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>原生js模拟vue中简单的v-model</title>
</head>
<body>
<p></p>
<button id="update">修改按钮</button>
<button id="get">获取按钮</button>
<script>
let obj = { name: '张三' }
Object.defineProperty(obj, 'str', {
get() {
return obj.name
},
set(newVal) {
obj.name = newVal
console.log(newVal);
document.querySelector('p').innerHTML = newVal
}
})
document.querySelector('#get').onclick = function () {
document.querySelector('p').innerHTML = obj.name
}
document.querySelector('#update').onclick = function () {
obj.str = '李四'
}
</script>
</body>
</html>
v-model 本质是就是 v-bind 和 v-on 的语法糖 .