• vue nexttick的理解和使用场景


    应用场景

    需要在视图更新之后,基于新的视图进行操作

    文档说明

    在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM

    nextTick原理

    1、异步说明
    Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新
    2、事件循环说明
    简单来说,Vue 在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。

    created、mounted

    在 created 和 mounted 阶段,如果需要操作渲染后的试图,也要使用 nextTick 方法。
    注意 mounted 不会承诺所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,可以用 vm.$nextTick 替换掉 mounted

    mounted: function () {
      this.$nextTick(function () {
        // Code that will run only after the
        // entire view has been rendered
      })
    }
    

    以下使用nexttick的三种情况

    1、点击按钮显示原本以 v-show = false 隐藏起来的输入框,并获取焦点。

    showsou(){
      this.showit = true //修改 v-show
      document.getElementById("keywords").focus()  //在第一个 tick 里,获取不到输入框,自然也获取不到焦点
    }
    

    修改为:

    showsou(){
      this.showit = true
      this.$nextTick(function () {
        // DOM 更新了
        document.getElementById("keywords").focus()
      })
    }
    

    2、点击获取元素宽度。

    <div id="app">
        <p ref="myWidth" v-if="showMe">{{ message }}</p>
        <button @click="getMyWidth">获取p元素宽度</button>
    </div>
    
    getMyWidth() {
        this.showMe = true;
        //this.message = this.$refs.myWidth.offsetWidth;
        //报错 TypeError: this.$refs.myWidth is undefined
        this.$nextTick(()=>{
            //dom元素更新后执行,此时能拿到p元素的属性
            this.message = this.$refs.myWidth.offsetWidth;
      })
    }
    

    3、使用 swiper 插件通过 ajax 请求图片后的滑动问题。

    参考阅读:

    https://segmentfault.com/a/1190000012861862?utm_source=tag-newest

  • 相关阅读:
    drupal drush 在windows下的安装和配置
    Drupal 7 配置ckeditor和ckfinder编辑器实现图片上传--不用wysisyg
    阿里云Centos配置iptables防火墙
    25个最常用的iptables策略
    防简单攻击iptables策略
    iptables防DDOS攻击和CC攻击设置
    Linux Web服务器网站故障分析常用的命令
    Linux/CentOS防CC攻击脚本
    Map字符串类型去掉空格处理
    读文件字节流大小的动态设置
  • 原文地址:https://www.cnblogs.com/fozero/p/10863667.html
Copyright © 2020-2023  润新知