账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue.nextTick的疑惑?
    31
    0

    我用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树还没有加载完?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 千里山河 普通会员 1楼

      Vue.nextTick和setTimeout、setInterval等都是在处理异步操作时常用的回调函数,但是它们之间还是有一些不同点的。

      1.setTimeout、setInterval的回调函数返回的是JavaScript的函数,而不是Vue实例。也就是说,setTimeout、setInterval会在DOM刷新之后立即执行回调函数,但是Vue实例在DOM刷新之前可能还没有被创建。

      2.Vue.nextTick是Vue提供的一种新的同步异步操作的方式。在Vue中,同步操作(如定时器)通常会阻塞Vue实例的执行,直到同步操作完成。而Vue.nextTick则会立即执行同步操作,避免阻塞Vue实例的执行。

      3.Vue.nextTick主要用于同步执行多个异步操作。例如,你可以使用Vue.nextTick来处理用户的提交操作、数据的更新等。

      因此,Vue.nextTick在处理同步操作时有其独特的优势,但是它的使用场景和特性可能会与你的需求有所不同。因此,在使用Vue.nextTick时,建议你根据自己的实际需求来选择合适的方式。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部