美文网首页
Vue双向数据绑定

Vue双向数据绑定

作者: 那年点夏 | 来源:发表于2018-01-17 00:42 被阅读0次

Vue中的双向数据绑定原理

  • 利用ES5中的 object.defineProperty() 方法来实现,它是ES5中无法shim(兼容)的特性,所以Vue不支持IE8以及更低版本浏览器。
  • object.defineProperty() 方法 可以用来给 对象添加属性 ,与一般的 对象添加属性 不同的是,它可以对添加的属性加些修饰,而双向数据绑定的原理利用了:getter / setter
//一般的 给对象添加属性:
var obj = {};
obj.name = 'jack';
console.log(obj);
  • get 的使用:
//object.defineProperty() 方法 给对象添加属性:
var obj = {};
object.defineProperty(obj,'msg',{
      get: function () {
         //当访问对象属性的时候,这个方法会执行!!!
            console.log('对象的msg属性被访问了~');
      },
      set: function () {
        //当设置对象属性法时候,这个方法会执行!!!
      }
}) 
console.log(obj.msg);
get的结果

一般 get 是返回某个具体的值;

  • set 的使用:
//object.defineProperty() 方法 给对象添加属性:
var obj = {};
object.defineProperty(obj,'msg',{
      get: function () {
         //当访问对象属性的时候,这个方法会执行!!!
            console.log('对象的msg属性被访问了~');
            return this._msg;
      },
      set: function (val) {
        //当设置对象属性法时候,这个方法会执行!!!
          console.log('给对象设置了msg属性~')
          this._msg = val;
      }
}) 
console.log(obj.msg);
set的结果

object.defineProperty() 方法 的其他描述:

  • configurable:默认为false,当且仅当该属性的configurable 为 true 时,该属性描述符才能够被改变。
  • enumerable:默认为 false,当且仅当该属性的enumerable 为true 时,该属性才能出现在对象的枚举属性中。
  • value:默认为undefined,表示该属性的值,可以是任何有效的javascript值(数值,对象,函数等)。
  • writeable:默认为false,当且仅当该属性的writeable值为true时,该属性才能够被赋值运算符改变。

Vue双向数据绑定原理的模拟实现:

<div id="app">
      <input type="text" id="txt">
      <h1 id="h1"></h1>
</div>

<script>
      var txt = document.getElementById('txt'),
        h1 = document.getElementById('h1');
      var data = {};
      Object.defineProperty(data,'msg',{
            set: function(val){
                  h1.innertext = val;
            }
      }) 
      txt.addEventListener('keyup',function(){
          data.msg = txt.value;
      })
</script>

结果表示:


模拟结果

Vue执行过程(双向数据绑定的原理分析):

1、根据传入的 el 配置项,找到页面中需要被Vue管理的内容区域;
2、遍历所有的后代元素,收集出现的所有指令(v-model)和表达式({{ }})(mustache);
3、遍历传入 data 中的数据,分别通过 Object.defineProperty() 实现每个数据的 get/set
4、每个数据的 get 和 set 中,分别与页面中使用该数据的指令和表达式对应起来;
5、将来当数据改变的时候,通过 设定好的 get,将数据的变化同步到页面中;

相关文章

  • Vue 中的双向数据绑定

    双向绑定 单向数据流 双向绑定 or 单向数据流 Vue 是单向数据流,不是双向绑定 Vue 的双向绑定是语法糖 ...

  • Vue入门(二)——数据绑定

    一、什么是双向数据绑定 双向数据绑定是Vue的核心功能之一。所谓双向数据绑定是指:HTML标签上的数据绑定到Vue...

  • vue 双向数据绑定

    Vue实现数据双向绑定的原理:Object.defineProperty()vue实现数据双向绑定主要是:采用数据...

  • 深入Vue响应式原理

    1.Vue的双向数据绑定 参考 vue的双向绑定原理及实现Vue双向绑定的实现原理Object.definepro...

  • 02Vue.js的数据绑定

    理解Vue的双向数据绑定 Vue有一个显著的地方就是它拥有双向数据绑定功能,那么何为双向数据绑定呢?双向是指:HT...

  • Vue实现数据双向绑定的原理

    Vue实现数据双向绑定的原理:Object.defineProperty() vue实现数据双向绑定主要是:采用数...

  • 02Vue.js快速入门-Vue入门之数据绑定

    2.1. 什么是双向绑定? Vue框架很核心的功能就是双向的数据绑定。 双向是指:HTML标签数据 绑定到 Vue...

  • 如何用js手动实现一个数据双向绑定

    双向数据绑定: 我们这里拿vue举例,vue中的双向数据绑定主要是利用Object.defineProperty(...

  • Vue之表单双向数据绑定和组件

    三、表单双向数据绑定和组件 目录:双向数据绑定、组件 1.双向数据绑定 1)什么是双向数据绑定Vue.js是一个M...

  • vue基本面试题总结

    原文地址:vue基本面试题 1、vue双向数据绑定? vue数据双向绑定是通过 数据劫持 结合 发布者-订阅者 模...

网友评论

      本文标题:Vue双向数据绑定

      本文链接:https://www.haomeiwen.com/subject/fsxeoxtx.html