javascript - Vue,nextTick问题
阿神
阿神 2017-04-11 12:02:22
[JavaScript讨论组]

vm.$nextTick

看官网没明白,我不知道干嘛用的。

麻烦简单 详细的说一下。

阿神
阿神

闭关修行中......

全部回复(2)
大家讲道理

上周五用Apicloud写一个简单的app的一个使用场景,代码如下:

created:function(){
      
      var that = this ;
        // ajax请求电影数据
      $.get(apiDouban.hotMovies, function(data) {
        // 截取用于swiper图片滚动
        that.hotMovies = data.subjects.slice(0, 8);
        // 处理图片滚动相关代码
        Vue.nextTick(function(){
           var swiper = new Swiper('.swiper-container', {
              pagination: '.swiper-pagination',
              nextButton: '.swiper-button-next',
              prevButton: '.swiper-button-prev',
              paginationClickable: true,
              spaceBetween: 30,
              centeredSlides: true,
              autoplay: 2500,
              autoplayDisableOnInteraction: false
          });

       });

        $.get(apiDouban.comingSoonMovies, function(data) {
          that.comingSoonMovies = data.subjects;
      });

    });
    }

当时在写这个的时候在没使用Vue.nextTick()时遇到的问题是,swiper只渲染出来了一张图片,后来想到,ajax获取到的数据赋值给vue下的变量需要时间,然后vue使用v-for将这个变量渲染出列表也需要时间,所以在不使用Vue.nextTick()的时候下面这段代码会同时和vue的变量赋值、渲染模板一起执行,就会出现数据不全的状况。所以,应该可以简单的将Vue.nextTick()理解为将异步的代码转换为同步执行,在我写的这个例子中也就是vue赋值完成后再去执行swiper相关要做的事情。更简单的说就是,上面的代码执行完了,Vue.nextTick()里面的代码才能去开始做。

 var swiper = new Swiper('.swiper-container', {
              pagination: '.swiper-pagination',
              nextButton: '.swiper-button-next',
              prevButton: '.swiper-button-prev',
              paginationClickable: true,
              spaceBetween: 30,
              centeredSlides: true,
              autoplay: 2500,
              autoplayDisableOnInteraction: false
          });
天蓬老师

相当于setTimeout(fn, 0)看看这个就知道了
https://www.zhihu.com/questio...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号