Vue ---day03

nextTick: 当数据改变时,dom元素不会立即改变,获取更新后的DOM。

  Vue.nextTick(funciton(){})

  vm.$nextTick(function(){})

  vm.$nextTick().then();   没有提供回调函数且支持Promise环境中,则返回一个 Promise。(注意vue不自带 Promise的 polyfill)

Vue生命周期:生命周期钩子自动绑定this上下文到实例中。 this指向vm

  创建阶段  created 数据观测 ,属性和方法的运算,watch/event 事件回调---实例已完成的配置, $el属性尚不可用

  挂载阶段  mounted实例被挂载后调用,el 被新创建的  vm.$el 替换

  更新阶段

  销毁阶段

  errorCaptured    (err: Error, vm: Component, info: string) => ?boolean

内置组件

  component    动态组件的问题  <component :is="componentId"></component>   (多个组件切换,避免在模板中做大量的判断)--组件依然会重复创建和销毁

  transition        

  transition-group

  keep-alive   保留组件和数据状态,  避免重复调用 created和destroy  (作用于直接子组件被开关的情况,且只有一个子元素被渲染)

  slot  组件模板的内容分发插槽   或 避免传给子组件props内容太长

    slot组件和组件模板在一个作用域内

    slot内部定义组件包含的元素(定义影子 DOM)

    影子dom和组件模板不在一个作用域内(不能直接访问组件内部数据)

    通过slot组件向 影子DOM传递参数

    影子DOM在这里实际上也是一个子组件

安装插件

  Vue.use(plugin)

  如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。

  install 方法调用时,会将 Vue 作为参数传入。(obj.install方法接收的第一个参数是Vue,第二个参数是 options)

  在调用 new Vue() 之前调用;

  插件只会被安装一次

 

为自定义选项注入处理逻辑

  Vue.mixin(Object)  全局的

    影响每一个之后创建的 Vue 实例,包括第三方组件

    只应当应用于自定义选项--如 下面的 myOption 选项(vue内部时没有的)

    建议作为插件发布,避免重复发布

  Vue.mixin({

    created: function () {  // 生命周期可以重复

        var myOption = this.$options.myOption

         if (myOption) { console.log(myOption) }  // ===> 'hello!'

    }

   })

  new Vue({

    myOption: 'hello!'   // myOption 为自定义选项

  })

 

 

// 发布插件的一个例子 ----   给实例添加 http 选项

  // 定义一个插件

  function axios(){ console.log("axios");}

  .................................................................Vue.prototype.http = axios;  //改Vue的原型,不推荐

  Vue.use(function(_Vue){

    _Vue.mixin({

      beforeCreate: function(){

        console.log('beforeCreate1');

        if(this.$options.adaptor){   // this  每一个组件实例 

          this.$http = this.$options.http;

        }

        if(this.$options.parent && this.$options.parent.$http){  // 给子组件增加 方法

          this.$http = tthis.$options.parent.$http

        }

      }

    });

  })

 

  new Vue({

    el:"#pp",

    adaptor: axios, //  定义了一个 http 库

    beforeCreate:function(){

      console.log("实例beforeCreate2");

    }

  })

  

  

 

 

 

  

  

 

       

posted @ 2020-02-19 20:52  铁塔  阅读(124)  评论(0编辑  收藏  举报