注意:
- 阅读本文需要对 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;
}
}
使用场景
用户评论后,刷新评论列表:
- 首次获取评论数据后,将
ifUpdate
改为false
- 用户添加评论后将数据传到后台,并将
ifUpdate
变为true
- 指令根据
ifUpdate
变化而触发,再次通过 ajax 从后台拉取数据 - 拉取完再将
ifUpdate
重置为false