vue 自定義指令實現資料拉取更新

weixin_33670713發表於2016-05-12

注意

  • 閱讀本文需要對 vue 有一定理解
  • 下文的程式碼片段位於 vue 的單檔案元件中,即以 .vue 結尾的檔案中
  • 以下說明的只是一種實現方法,既不是唯一的方法也不是最好的方法( ̄_ ̄|||)

Step 1

首先,一定要先定義變數:

// app.vue <script>

data () {   
    return {
      // 定義 getData
      getData:{},
      // 定義自定義指令的繫結值
      ifUpdate:true
    }
}

Step 2

然後要使用 ajax 的話,要在 index.html 裡引入 jquery,這樣就可以全域性使用了:

// index.html

<script type="text/javascript" src="./lib/js/jquery-2.1.1.min.js"></script>

Step 3

接著使用自定義指令,在元件例項化後,會自動執行自定義指令裡的方法:

元件例項化後會立即以初始值 ifUpdate 為引數第一次呼叫自定義指令 initData 的方法,之後每次引數值 ifUpdate 變化時會再次呼叫 initData 的函式,引數為 ifUpdate 的新值與舊值。

// app.vue <template>

// 在頁面節點(自由選擇)中繫結自定義指令
<div v-initData="ifUpdate" ></div>
// app.vue <script>

// 定義自定義指令
directives:{
    initData:function(val, oldVal){
      if(!val){
        return;
      }
      var self = this;
      $.getJSON( "ajax/test.json", function( data ) {
          self.vm.getData = data;
      });
      // 下次 ifUpdate 值更新為 true 時就會再次使用上面的 ajax 去獲取資料
      self.vm.ifUpdate = false;
    }
}

使用場景

使用者評論後,重新整理評論列表:

  1. 首次獲取評論資料後,將 ifUpdate 改為 false
  2. 使用者新增評論後將資料傳到後臺,並將 ifUpdate 變為 true
  3. 指令根據 ifUpdate 變化而觸發,再次通過 ajax 從後臺拉取資料
  4. 拉取完再將 ifUpdate 重置為 false

相關文章