当前位置: 首页 > news >正文

关于vue中的nextTick深入理解

一、定义[nextTick、事件循环]

   nextTick的由来:
    由于VUE的数据驱动视图更新,是异步的,即修改数据的当下,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。
   nextTick的触发时机:
    在同一事件循环中的数据变化后,DOM完成更新,立即执行nextTick(callback)内的回调。
   应用场景:
    需要在视图更新之后,基于新的视图进行操作。
  以上出现了事件循环的概念,其涉及到JS的运行机制,包括主线程的执行栈、异步队列、异步API、事件循环的协作,此处不展开之后再总结。大致理解:主线程完成同步环境执行,查询任务队列,提取队首的任务,放入主线程中执行;执行完毕,再重复该操作,该过程称为事件循环。而主线程的每次读取任务队列操作,是一个事件循环的开始。异步callback不可能处在同一事件循环中。
   简单总结事件循环:
    同步代码执行 -> 查找异步队列,推入执行栈,执行callback1[事件循环1] ->查找异步队列,推入执行栈,执行callback2[事件循环2]...
  即每个异步callback,最终都会形成自己独立的一个事件循环。
  结合nextTick的由来,可以推出每个事件循环中,nextTick触发的时机:
     同一事件循环中的代码执行完毕 -> DOM 更新 -> nextTick callback触发
   tips:本文的任务队列、消息队列、异步队列指同一个东西,均指macrotask queue。
        事件循环详解:http://www.cnblogs.com/hity-tt/p/6733062.html 
 
上面这些内容纯属是从网上搬运过来的,接下来说说在项目中遇到的问题
    还是用文字啰嗦点说吧!代码实在不好展示我想表现的,因为我认为这种问题会在其他地方还会有类似问题;
     项目中用到了bootstrap-select.js插件(带搜索功能的下拉框),类似这样的插件在vue渲染完数据后肯定需要初始化,大概如下
mounted: function () {
    $('#select').selectpicker();
 }

我的业务需求是上面还有一个下拉框需要先选择上面的,来决定下面显示哪个模块,这时问题就来了,数据发生改变了,我的下拉框就变成如下图

然后我很机智呀!果断去watch里面再初始化一下插件呀!但是发现无效,这下彻底懵逼了,后面经过各种打印,各种百度发现了这个东东

watch:{
     type: function (val, oldVal) {
         if(val==2){
             Vue.nextTick(function () {   //或者用 this.$nextTick 
                 $('#select').selectpicker();
              })
      } } }

最后总结:只怪自己太菜了,js基础不够NB,什么都不想说了,努力吧!

 
 
 
 
 

转载于:https://www.cnblogs.com/duanyue/p/7458340.html

相关文章:

  • hashmap 遍历_你一般是怎么遍历HashMap的?
  • 团队名称:极限定理
  • 人工智能的三层基本架构_“人工智能”如何“深度学习”?
  • SQLite3使用详解
  • class反编译成java_Java源代码保护方法,通过加密技术保护源代码
  • 英伟达硬件加速编解码
  • python字典属于无序序列_五:Python序列之字典
  • Excel作为数据源TesTNG做数据驱动完整代码
  • ps工具预设_「设计干货」不要浪费时间调整设计效果图了,20款灯光预设送你用...
  • 游戏设计的236个技巧pdf
  • python index函数应用_Python pandas.DataFrame.set_index函数方法的使用
  • Nginx的配置安装和使用
  • pythonpygame游戏代码_使用Python第三方库pygame写个贪吃蛇小游戏
  • onchange事件实现编辑_Openlayer——绘制可编辑几何要素
  • Vue.js 基础学习 v-on 指令
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Java IO学习笔记一
  • passportjs 源码分析
  • PHP变量
  • Python 反序列化安全问题(二)
  • Python进阶细节
  • Web Storage相关
  • 半理解系列--Promise的进化史
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 想写好前端,先练好内功
  • 自制字幕遮挡器
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​比特币大跌的 2 个原因
  • #pragam once 和 #ifndef 预编译头
  • #pragma预处理命令
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (11)MATLAB PCA+SVM 人脸识别
  • (6)添加vue-cookie
  • (C++17) std算法之执行策略 execution
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)Windows2003安全设置/维护
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • ***测试-HTTP方法
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .net Signalr 使用笔记
  • .Net Web项目创建比较不错的参考文章
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .sh
  • /etc/sudoers (root权限管理)
  • /etc/sudoer文件配置简析