美文网首页
Vue面试题

Vue面试题

作者: 良人不良 | 来源:发表于2021-07-28 10:22 被阅读0次

    1. Vue双向绑定的原理
    mvvm双向绑定,采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter、getter,在数据变动时发布消息给订阅者,触发相应的监听回调。

    图片说明.jpg
    几个要点
    1. 实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,数据发生变动时可拿到最新值并通知订阅者。核心方法Object.defineProperty( ),如果要对所有属性都进行监听的话,那么可以通过递归方法遍历所有属性值。
    2. 实现一个指令解析器 Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数
    3. 实现一个 订阅者Watcher,作为连接 Observer 和 Compile 的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图

    具体步骤

    1. 需要 observer 的数据对象进行递归遍历,包括子属性对象的属性,都加上 setter 和 getter,这样的话,给这个对象的某个值赋值,就会触发 setter,那么就能监听到了数据变化
    2. compile 解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图
    3. Watcher 订阅者是 Observer 和 Compile 之间通信的桥梁,主要做的事情是:
      1.在自身实例化时往属性订阅器(dep)里面添加自己
      2.自身必须有一个 update() 方法
      3.待属性变动 dep.notice() 通知时,能调用自身的 update() 方法,并触发 Compile 中绑定的回调

    相关文章

      网友评论

          本文标题:Vue面试题

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