(callback),当数据发生变化,更新后执行回调。
this.$nextTick(callback),当dom发生变化,更新后执行的回调。
在以下两个情况下需要用到()
生命周期的created()钩子函数进行的DOM操作一定要放在()的回调函数中,原因是在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进()的回调函数中。与之对应的就是mounted钩子函数,因为该钩子函数执行时所有的DOM挂载和渲染都已完成,此时在该钩子函数中进行任何DOM操作都不会有问题 。
2.在数据变化后要执行的某个操作,而这个操作需要使用随数据改变而改变的DOM结构的时候,这个操作都应该放进()的回调函数中。在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
//改变数据
= 'changed'
//想要立即使用更新后的DOM。这样不行,因为设置message后DOM还没有更新
(this.$) // 并不会得到'changed'
//这样可以,nextTick里面的代码会在DOM更新后执行
(function(){
(this.$) //可以得到'changed'
})
比如 vue的吸顶效果
<template>
<div class="hello" ref="hello">
<div class="header">我是头部</div>
<ul class="nav" :class="{'is_fixed' : isFixed}" >
<li @click="returnL">tab1</li>
<li @click="returnL">tab2</li>
<li @click="returnL">tab3</li>
</ul>
<component :is="repMsg"></component>
</div>
</template>
<script>
import Tab1 from '@/components/tab1'
import Tab2 from '@/components/tab2'
import Tab3 from '@/components/tab3'
export default {
name: 'HelloWorld',
components: {
Tab1,
Tab2,
Tab3
},
computed: {
repMsg: function () {
return []
}
},
data () {
return {
msg: ['Tab1', 'Tab2', 'Tab3'],
index: 0,
isFixed: false,
offsetTop:0
}
},
mounted: function () {
('scroll', )
this.$nextTick( () => {
= ('#boxFixed').offsetTop
})
},
methods: {
returnL: function () {
= (++) % 3
},
initHeight () {
var scrollTop = || ||
= scrollTop > ? true : false;
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
*{
margin: 0;
padding: 0;
}
.header{
width: 100%;
height: 300px;
line-height: 300px;
border: 1px solid #ccc;
}
ul{
overflow: hidden;
display: flex;
justify-content:center;
top: 0;
}
li{
list-style: none;
float: left;
width: 100px;
height: 50px;
line-height: 50px;
border: 1px solid #ccc;
cursor: pointer;
}
.is_fixed {
position: fixed;
top: 0;
left: 50%;
margin-left: -153px;
z-index: 999;
}
</style>