使用Vue獲取數據時,經常會遇到獲取數據的速度比渲染組件的速度慢的情況,這就導致了數據無法及時渲染到頁面上的問題。原因是頁面渲染時,Vue組件已經被渲染出來了,但是數據還在請求中。這種情況下,簡單的在mounted鉤子函數中獲取數據是不可取的。下面,我們來介紹一些解決數據渲染滯后的方法。
1. 使用v-if指令
<template> <div v-if="loaded"> <ul> <li v-for="item in items" :key="item.id"> {{ item.name }} </li> </ul> </div> <div v-else> 加載中... </div> </template> <script> export default { data () { return { items: [], loaded: false } }, methods: { fetchData () { axios.get('/api/items') .then(response => { this.items = response.data this.loaded = true }) } }, mounted () { this.fetchData() } } </script>
2. 使用v-cloak指令
<template> <div v-cloak> <ul> <li v-for="item in items" :key="item.id"> {{ item.name }} </li> </ul> </div> </template> <style> [v-cloak] { display: none; } </style> <script> export default { data () { return { items: [] } }, methods: { fetchData () { axios.get('/api/items') .then(response => { this.items = response.data }) } }, mounted () { this.fetchData() } } </script>
3. 使用Vue的異步組件
<template> <div> <my-component v-if="loaded"></my-component> </div> </template> <script> export default { data () { return { loaded: false } }, components: { 'my-component': () => import('./MyComponent.vue') }, methods: { fetchData () { axios.get('/api/items') .then(response => { this.loaded = true }) } }, mounted () { this.fetchData() } } </script>
以上三種方法都可以解決數據渲染滯后的問題,具體選擇哪一種方法取決于具體情況。使用v-if指令適用于需要添加加載中動畫的情景,使用v-cloak指令是最簡單的方法,使用異步組件是Vue提供的官方解決方案。
上一篇css臉部按摩儀怎么用