Vue ---day03

nextTick: 當數據改變時,dom元素不會當即改變,獲取更新後的DOM。vue

  Vue.nextTick(funciton(){})ios

  vm.$nextTick(function(){})axios

  vm.$nextTick().then();   沒有提供回調函數且支持Promise環境中,則返回一個 Promise。(注意vue不自帶 Promise的 polyfill)dom

Vue生命週期:生命週期鉤子自動綁定this上下文到實例中。 this指向vm函數

  建立階段  created 數據觀測 ,屬性和方法的運算,watch/event 事件回調---實例已完成的配置, $el屬性尚不可用ui

  掛載階段  mounted實例被掛載後調用,el 被新建立的  vm.$el 替換this

  更新階段spa

  銷燬階段prototype

  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");

    }

  })

相關文章
相關標籤/搜索