vue.nextTick的疑惑?

我用isscroll插件写上拉加载的效果,大致的代码流程是这样的:
var vm = new Vue({//页面实例化一个vue对象

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

})

function _scroll(){

vm.myscroll = new isscroll('',{//实例化一个myscroll对象
    //code
})

};
我遇到的问题是这样的:
当我vm.init = function(){

ajax(...,data,function(){
    //...异步数据处理完成后,demo树更新,调用_scroll,实例化myscroll对象
    Vue.nextTick(function(){
        _scroll();//实例化成功
    })
});

}

现在有另一个逻辑:
vm.doing = function(){

//code
Vue.nextTick(function(){
    vm.myscroll.refresh();//当我页面上调用该方法时,会报错;error in nextTick:"ReferenceError: myScroll is not defined"
})

}
...这是为什么?当我做如下修改时就正常了

vm.doing = function(){

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

}
为什么nextTick方法调用后还要加一个延时?难道当执行该表达式时,demo树还没有加载完?

阅读 4.1k
1 个回答

这已经和nextTick没关系的啊。。
关于nextTick可以看看这篇,nextTick只是为了获取下一个循环更新后的dom元素。
你的报错是myScroll不存在,在你的vue实例里也没有看到这个变量,应该是isscroll这个插件生成的变量。那么很明显了,就是你调用refresh方法太早,比myScroll出现的早..如果它是你引用的js定义的变量,就是js还没执行到,如果是myscroll对象定义的变量就是这个对象还没初始化好(我没使用过isscroll,按报错推测的...)。

推荐问题
宣传栏