美文网首页
vue2.0响应式源码解析

vue2.0响应式源码解析

作者: 这代码不好写 | 来源:发表于2022-08-04 15:07 被阅读0次

    本文只帮助于理解vue2.0怎么做到事件绑定、双向数据绑定、vue底层处理

    vue是一个mvvm模式的渐进式框架

    Vue与React、Angular的不同是,但它是渐进的

    使用Angular,必须接受以下东西

    1、必须使用它的模块机制

    2、必须使用它的依赖注入

    3、必须使用它的特殊形式定义组件

    使用React,你必须理解

    1、函数式编程的理念

    2、需要知道它的副作用

    3、什么是纯函数

    4、如何隔离、避免副作用

    MVVM初始化

    在Vue初始化时会根据id获取dom对命令进行解析

    1、根据dom获取对HTML进行解析

    解析on命令,实现事件注册

    将on指令进行切割去除on:click中的click进行事件注册

    // 将on命令根据dom进行注册(node为dom)
    eventHandler: function(node, vm, exp, dir) {
            var eventType = dir.split(':')[1],
                fn = vm.$options.methods && vm.$options.methods[exp];
    
            if (eventType && fn) {
                node.addEventListener(eventType, fn.bind(vm), false);
            }
        },
    

    解析v-model

    将v-model命令注册进入input监听中

    node.addEventListener('input', function(e) {
                var newValue = e.target.value;
                if (val === newValue) {
                    return;
                }
    
                me._setVMVal(vm, exp, newValue);
                val = newValue;
            });
    

    如何做到input监听与html中input相互绑定呢???

    当数据发生改变时会将新数据塞入dom中

    在初始化时做了什么操作呢?

    在vue初始化时会将dom,options,一起传入

    options : {data,methods,...}

    第一步:

    options函数中的数据注入defineProperty进行get,set,同时将data对象中注入计算

    ///me : this
    Object.defineProperty(me, key, {
                configurable: false,
                enumerable: true,
                get: function proxyGetter() {
                    return me._data[key];
                },
                set: function proxySetter(newVal) {
                    me._data[key] = newVal;
                }
            });
    

    计算属性的实现

    获取到options中的key,在Object.defineProperty进行get返回即可

    第二步:

    options传入监听者Observer进行Object.defineProperty监听,并同时初始化订阅者Dep,当数据发生变化时会通知订阅者

    第三步:

    dom中传入命令解析器中对命令进行解析,详情看[根据dom获取对HTML进行解析]

    监听者职责

    将数据放入Object.defineProperty中,并添加进入订阅者集合,

    当数据发生变化时,会通知订阅者进行处理

    订阅者职责

    当监听者通知订阅者时,订阅者将数据产生变化传递给观察者

    然后根据订阅者集合中数据进行数据更新

    监听属性怎么来的呢

    mvvm初始化时同步将options传入了观察者,当数据通知到观察者是,就会进行数据更新,进而达到了数据监听的目的

    watch

    下面看下mvvm解释图

    vue20220729.png vue-20220729.png

    相关文章

      网友评论

          本文标题:vue2.0响应式源码解析

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