欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

vue after appear

錢多多1年前8瀏覽0評論

Vue中v-ifv-for是經常用到的指令,它們非常方便地幫我們處理組件的渲染,但同時也會帶來一些性能問題。

v-ifv-for同時存在于一個組件中時,如果v-if條件為假,組件將不會被渲染。但如果條件變為真時,會發現組件的初始狀態的mounted鉤子并沒有被執行。

這就需要使用一個新的指令v-show來代替v-if。但如果我們不想使用v-show指令,還有一種更好的解決辦法,就是引入一個新的鉤子函數after-appear

Vue.directive('after-appear', {
inserted: function (el, binding, vnode) {
const className = binding.arg || 'appear'
const callback = binding.value
const observer = new IntersectionObserver(entries =>{
const entry = entries[0]
if (entry.intersectionRatio >0) {
observer.disconnect()
el.classList.add(className)
callback()
}
})
observer.observe(el)
}
})

上面的代碼就是一個自定義指令after-appear,它監聽組件的出現情況,在組件出現時執行callback函數,并在組件上添加指定的類名className

使用after-appear指令的示例如下:

<template>
<div v-after-appear="onAppear">
<!-- 視圖可見時會添加appear類名 -->
...
</div>
</template>
<script>
export default {
data () {
return {}
},
methods: {
onAppear () {
console.log('組件已經出現')
}
}
}
</script>

在上面的代碼中,v-after-appear="onAppear"表示在組件出現時,執行onAppear函數,在其中可以進行一些邏輯操作或者數據變更等。

總之,after-appear是一個很實用的指令,能很好地解決v-ifv-for存在時組件初始化的問題。