重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

vue指令与$nextTick操作DOM有什么区别-创新互联

小编给大家分享一下vue指令与$nextTick操作DOM有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

创新互联公司10多年企业网站制作服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,企业网站制作及推广,对效果图设计等多个行业拥有多年的网站设计经验的网站建设公司。

异步更新队列

可能你还没有注意到,Vue 异步执行 DOM 更新。只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。如果同一个 watcher 被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作上非常重要。然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去重的) 工作。Vue 在内部尝试对异步队列使用原生的 Promise.then MessageChannel,如果执行环境不支持,会采用 setTimeout(fn, 0) 代替。

例如,当你设置 vm.someData = 'new value' ,该组件不会立即重新渲染。当刷新队列时,组件会在事件循环队列清空时的下一个“tick”更新。多数情况我们不需要关心这个过程,但是如果你想在 DOM 状态更新后做点什么,这就可能会有些棘手。虽然 Vue.js 通常鼓励开发人员沿着“数据驱动”的方式思考,避免直接接触 DOM,但是有时我们确实要这么做。为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用 Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。例如:

{{message}}
var vm = new Vue({  el: '#example',  data: {  message: '123'  } }) vm.message = 'new message' // 更改数据 vm.$el.textContent === 'new message' // false Vue.nextTick(function () {  vm.$el.textContent === 'new message' // true })

在组件内使用 vm.$nextTick() 实例方法特别方便,因为它不需要全局 Vue ,并且回调函数中的 this 将自动绑定到当前的 Vue 实例上:

Vue.component('example', {
 template: '{{ message }}',
 data: function () {
 return {
  message: '没有更新'
 }
 },
 methods: {
 updateMessage: function () {
  this.message = '更新完成'
  console.log(this.$el.textContent) // => '没有更新'
  this.$nextTick(function () {
  console.log(this.$el.textContent) // => '更新完成'
  })
 }
 }
})

vue指令

钩子函数

一个指令定义对象可以提供如下几个钩子函数 (均为可选):

bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。

componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。

unbind:只调用一次,指令与元素解绑时调用。

钩子函数的参数 (即 el、binding、vnode 和 oldVnode)。

需要注意的是:update时dom可能还没有插入文档,componentUpdated是DOM已经插入文档。并且所谓的“更新”这个钩子函数的触发条件非常宽泛,不容易把控。比如,其他与该节点无关的相邻节点更新,引发其布局的重流,也会导致该钩子函数触发

因此,如果想要在数据更新后,操作DOM,使用指令的update, componentUpdated 需要谨慎,可以考虑使用nextTick

以上是“vue指令与$nextTick操作DOM有什么区别”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


网站名称:vue指令与$nextTick操作DOM有什么区别-创新互联
文章地址:http://cqcxhl.cn/article/dgjhij.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP