vue双向数据绑定原理

我们都知道,anjular,vue之所以这么火很大的一个因素就是因为具备双向数据绑定的功能。至于是怎么实现的,以我的功力自己还参透不了。在网上看了很多篇文章,基本上是理解了,下面说一下我总结的和我理解的vue是如何进行双向数据绑定的。

再说双向数据绑定之前说下什么是单向数据绑定

之前我们前端写数据绑定的流程大多是这样的,我们发送请求,从后端拿到数据。然后在前端编写js代码,把后端数据整合到html代码中,然后把这段代码插入到文档流中。来实现数据绑定。

单向数据绑定的缺点:一般单向数据绑定的业务处理会掺杂大量复杂的DOM操作,代码一旦生成就没有办法再改变。如果想改变视图中的数据,就要重新进行请求,去掉之前的HTML代码,再重新编辑整理成html代码插入到文档流中。

双向数据绑定指的是视图和数据模型之间的双向绑定,用户在视图上的改动会自动同步到数据模型中,数据模型中的值发生了变化也会同步到视图中。这样我们就无需重新整理HTML文档,省去了大量dom操作,真正的前后端分离,给我们前端带来了大大的方便。设想一下,我们用双向数据绑定提交表单,是不是无需一一获取用户输入的信息,而是可以直接从数据模型中获取。

首先呢,我想先说下defineProperty()这个方法,defineProperty这个方法在js中十分的重要,主要功能是用来定义对象的属性或修改原有的属性。并且返回这个对象 。

使用方法如下

obj.defineProperty(obj,prop,descriptor)

第一个参数代表的是想要操作的对象

第二个参数是想要定义或者修改的属性

第三个是属性描述符

属性描述符是一个对象,分为数据属性和存取属性。双向数据绑定主要就是利用了存取属性来实现的,存取属性中提供了get和set方法,get方法是获取属性时会触发的方法,set方法是设置或者改变属性时会触发的方法,双向数据绑定就是通过defineProperty方法重新定义了对象属性的获取(get)和设置属性值(set)得操作来实现的

下面是个简单的例子

<body>
<input type="text" id="userName">
<div id ="name"></div>
<script>
    var obj={
    };
    var keyVal;
    //主要使用到了get和set方法,最为关键
    Object.defineProperty(obj,"userName",{
        get:function(){
           console.log("get函数触发")
        },
        set:function(val){
            console.log("set函数触发");
            document.getElementById("name").innerHTML=val;
            document.getElementById("userName").value=val;
        }
    });
    document.getElementById("userName").addEventListener("keyup",function(event){
        obj.userName=event.target.value;
    }
    )
</script>
</body>
在控制台给obj.userName赋值会触发set方法,取值会触发get方法,实现双向数据绑定




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值