文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

vue.nextTick()是什么及怎么用

2023-06-30 09:38

关注

这篇文章主要介绍了vue.nextTick()是什么及怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue.nextTick()是什么及怎么用文章都会有所收获,下面我们一起来看看吧。

概念

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

简单理解:

为了去解决数据更新了但是视图不更新的问题,当数据更新了,在DOM渲染后,自动执行该函数

原理

Vue是异步执行dom更新的,一旦观察到数据变化,Vue就会开启一个队列,然后把在同一个事件循环 (event loop) 当中观察到数据变化的 watcher 推送进这个队列。如果这个watcher被触发多次,只会被推送到队列一次。这种缓冲行为可以有效的去掉重复数据造成的不必要的计算和DOm操作。而在下一个事件循环时,Vue会清空队列,并进行必要的DOM更新。
当你设置 vm.someData = ‘new value’,DOM 并不会马上更新,而是在异步队列被清除,也就是下一个事件循环开始时执行更新时才会进行必要的DOM更新。如果此时你想要根据更新的 DOM 状态去做某些事情,就会出现问题。。为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用 Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。

举例

<template>  <div>    <button ref="btn" @click="handleBtn()">{{ message }}</button>  </div></template><script>export default {  data(){    return{      message:'这个是原始值'    }  },  methods:{    handleBtn:function(){    let that=this    that.message='修改后的值'    console.log(that.$refs.btn.innerText);//这里输出的还是原始值  }  }}</script><style></style>

通过例子可以看到这样的话最终输出的值还是原来的值,下面再看一下使用this.$nextTick()会发生什么?

<template>  <div>    <button ref="btn" @click="handleBtn()">{{ message }}</button>  </div></template><script>export default {  data(){    return{      message:'这个是原始值'    }  },  methods:{    handleBtn:function(){    let that=this    that.message='修改后的值'    this.$nextTick(function(){      console.log(that.$refs.btn.innerText);  //这里输出的是修改后的值    })  }  }}</script><style></style>

通过这个例子就可以明显的看到this.$nextTick()的作用。

注意:

vue实现响应并不是数据发生变化之后DOM立即变化。而是按照一定的策略进行DOM的更新,在使用this.$nextTick()以后,就可以在他的回调中获取到更新后的DOM

应该什么时候使用vue.$nextTick()呢?

<template>  <div>    {{ message }}    <button @click="changeText()">测试</button>  </div></template><script>export default {  data() {    return {      message: "这个是原始值",    };  },  methods: {    changeText () {      let that = this;      this.message = "这是修改后的值";      that.$nextTick(function(){        let txt=document.getElementById('btn').innerText        console.log(txt);        txt==='这个是原始值'? console.log('data的值发生改变时DOM的值没有立即更新') : console.log('data的值发生改变时DOM的值立刻更新了');      })    },  },};</script><style></style>

关于“vue.nextTick()是什么及怎么用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“vue.nextTick()是什么及怎么用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯