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