简单实现Vue2.0(Object.defineProperty)和Vue3.0(Proxy)的数据双向绑定
程序员文章站
2022-07-12 22:32:16
...
vue2中通过Object.defineProperty实现数据双向绑定
<body>
<input type="text" id="ipt" >
<h1 id="h1"></h1>
<script>
let obj = { val:"" }
//每次修改obj对象中的val会造成死循环,所以我们需要定义一个新对象作为中间人
let newobj = JSON.parse(JSON.stringify(obj))
//三个参数第一个是我们要监听的对象、第二个是我们要监听的属性、第三个就是我们的get和set方法
Object.defineProperty( obj, 'val', {
get: function () {
return newobj.val
},
set: function (val) {
newobj.val = val
objserve()
}
} )
function objserve () {
ipt.value = obj.val
h1.innerHTML = obj.val
}
ipt.oninput = function () {
obj.val = this.value
}
</script>
</body>
vue3中通过Proxy实现数据双向绑定
<body>
<!-- input标签 -->
<input type="text" id="ipt">
<!-- 展示内容 -->
<h1 id="h1"></h1>
<script>
//双向绑定的属性
let obj = { val : '' }
//两个参数、proxy不需要指定属性、它可以监听对象里面的所有属性
obj = new Proxy( obj, {
//获取属性值
//target就是我们绑定的对象、prop是我们要获取的属性、第三个proxy参数是可选的(我们监听的对象实例)
get: function ( target, prop, proxy ) {
return target[prop]
},
//修改属性值
//set有四个参数、target就是我们绑定的对象、prop是我们要获取的属性、第三个是我们要修改的属性值、第四个proxy参数是可选的(我们监听的对象实例)
//相对于get方法多了一个属性值
set: function ( target, prop, val ) {
//将我们要修改的属性进行赋值
target[prop] = val
//将obj.val绑定给input框的value
//并把内容展示到了页面
objserve()
}
} )
//修改属性值后调用的方法
function objserve () {
ipt.value = obj.val
h1.innerHTML = obj.val
}
//给输入框绑定输入事件
ipt.oninput = function () {
obj.val = this.value
}
</script>
</body>
简单的实现了数据双向绑定,写的不好请笑纳
推荐阅读
-
使用 Object.defineProperty (vue2)和 Proxy(vue3)实现Vue双向数据绑定
-
分别使用 Object.defineProperty 和 proxy 实现简单的数据双向绑定
-
Proxy和Object.defineProperty实现简单的数据绑定
-
用object.defineproperty()和proxy实现简单的双向绑定,并比较两者优劣
-
vue的双向数据绑定(Object.defineProperty(),和es6的Proxy的底层封装是Object.defineProperty()封装的);...
-
简单实现Vue2.0(Object.defineProperty)和Vue3.0(Proxy)的数据双向绑定
-
VUE - vue2.0与vue3.0双向数据绑定的实现原理及区别
-
Vue(2.x及3.0)是如何实现双向绑定的(Object.defineProperty 和 Proxy)以及常见错误说明
-
简单了解 vue2.0 是如何用 Object.defineProperty() 来实现 双向绑定的