vue1源码学习04

43 阅读1分钟

// 运行时状态
vm = {
    // 提供最外层的api
    get a(){
        // 闭包
        // return compiler.data.a
        return {
            // 嵌套的
            get(){

            },
            set(){
                // 1. 解绑 -- 防止回调地狱
                // 2. copyPaths -- 全量数据 --> undefined
                // 3. 初始化迭代
                    // - emit("set")
                    // 1. 广播 -- 嵌套循环
                    //  --- 告诉父组件修改
                    //  --- 解决 嵌套组件修改的问题,this.a.b.c = 1
                    //  --- 2. 重新进行绑定 --- 嵌套的,当前自身的事件流
                    
            }
        }
    },
    on:{
        set(){
            // render 相关

            /**
             * - 获取了修改的属性 
             * - 获取到所有修改属性对应的指令了
             * 
             * - 根据id和指令,触发渲染修改任务,防止重复刷新和重绘
             */
            flush()

        }
    }
}

初始化
new Vue
    - vm
        - app -- compiler
        - data 
        - 事件流 
            - a.b.c --> a.b
        - observer
            - 指令[渲染的内容,v-model/v-text,v-if,v-for] + 数据
            - 任务队列
            - rqa
        - $data
    
flush: queue,一次进行执行 某一批数据的变化
    change:a   --》 dirs  --> text/ el.nodeValue = value
    change:a.b           --> show / el.display