vue 自定义指令实现数据拉取更新

框架

浏览数:203

2019-3-10

AD:资源代下载服务

注意

  • 阅读本文需要对 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