最近,在项目中要使用Swiper做一个移动端轮播插件。需要先异步动态加载数据后,然后使用v-for渲染节点,再执行插件的滑动轮播行为。解决这个问题,我们通过在组件中使用vm.$nextTick来解决这一需求。
一、vm.$nextTick( [callback] )
二、Vue.nextTick( [callback, context] )
三、异步更新队列
实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<ul id= "demo" > <li v- for = "item in list" >{{item}}</div> </ul> new Vue({ el: '#demo' , data:{ list=[0,1,2,3,4,5,6,7,8,9,10] }, methods:{ push: function (){ this .list.push(11); this .nextTick( function (){ alert( '数据已经更新' ) }); this .$nextTick( function (){ alert( 'v-for渲染已经完成' ) }) } }}) |
或者:
1
2
3
4
5
6
7
8
9
10
11
|
this .$http.post(apiUrl) .then((response) => { if (response.data.success) { this .topFocus.data = response.data.data; this .$nextTick( function (){ //渲染完毕 }); } }). catch ( function (response) { console.log(response); }); |
总结:
* `Vue.nextTick(callback)`,当数据发生变化,更新后执行回调。
* `Vue.$nextTick(callback)`,当dom发生变化,更新后执行的回调。