鍍金池/ 問答/HTML/ vue.nextTick的疑惑?

vue.nextTick的疑惑?

我用isscroll插件寫上拉加載的效果,大致的代碼流程是這樣的:
var vm = new Vue({//頁面實(shí)例化一個vue對象

el:'#dome',
data:{
    myscroll:'',
}
//...

})

function _scroll(){

vm.myscroll = new isscroll('',{//實(shí)例化一個myscroll對象
    //code
})

};
我遇到的問題是這樣的:
當(dāng)我vm.init = function(){

ajax(...,data,function(){
    //...異步數(shù)據(jù)處理完成后,demo樹更新,調(diào)用_scroll,實(shí)例化myscroll對象
    Vue.nextTick(function(){
        _scroll();//實(shí)例化成功
    })
});

}

現(xiàn)在有另一個邏輯:
vm.doing = function(){

//code
Vue.nextTick(function(){
    vm.myscroll.refresh();//當(dāng)我頁面上調(diào)用該方法時,會報錯;error in nextTick:"ReferenceError: myScroll is not defined"
})

}
...這是為什么?當(dāng)我做如下修改時就正常了

vm.doing = function(){

//code
Vue.nextTick(function(){
    setTimeout(function(){
        vm.myscroll.refresh();//正常了
    },100)
})

}
為什么nextTick方法調(diào)用后還要加一個延時?難道當(dāng)執(zhí)行該表達(dá)式時,demo樹還沒有加載完?

回答
編輯回答
萌吟

這已經(jīng)和nextTick沒關(guān)系的啊。。
關(guān)于nextTick可以看看這篇,nextTick只是為了獲取下一個循環(huán)更新后的dom元素。
你的報錯是myScroll不存在,在你的vue實(shí)例里也沒有看到這個變量,應(yīng)該是isscroll這個插件生成的變量。那么很明顯了,就是你調(diào)用refresh方法太早,比myScroll出現(xiàn)的早..如果它是你引用的js定義的變量,就是js還沒執(zhí)行到,如果是myscroll對象定義的變量就是這個對象還沒初始化好(我沒使用過isscroll,按報錯推測的...)。

2018年1月18日 17:46