vue实现加载
Vue 实现加载功能的方法
使用 v-if 或 v-show 控制加载状态
通过数据绑定控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,v-show 只是切换 display 属性。
<template>
<div>
<div v-if="isLoading" class="loading-spinner">加载中...</div>
<div v-else>内容已加载</div>
</div>
</template>
<script>
export default {
data() {
return {
isLoading: true
}
},
mounted() {
setTimeout(() => {
this.isLoading = false
}, 2000)
}
}
</script>
使用异步组件实现懒加载
Vue 允许将组件定义为异步加载,适合大型应用的分块加载。
const AsyncComponent = () => ({
component: import('./MyComponent.vue'),
loading: LoadingComponent,
error: ErrorComponent,
delay: 200,
timeout: 3000
})
路由懒加载
结合 Vue Router 实现路由级别的懒加载,优化首屏加载速度。
const router = new VueRouter({
routes: [
{
path: '/dashboard',
component: () => import('./views/Dashboard.vue')
}
]
})
使用第三方加载库
如 vue-loading-overlay 等专门的处理加载状态的库,提供更多自定义选项。
import Loading from 'vue-loading-overlay'
import 'vue-loading-overlay/dist/vue-loading.css'
Vue.component('Loading', Loading)
全局加载状态管理
通过 Vuex 管理全局加载状态,方便多个组件共享加载状态。
// store.js
export default new Vuex.Store({
state: {
isLoading: false
},
mutations: {
setLoading(state, status) {
state.isLoading = status
}
}
})
骨架屏技术
在内容加载前显示页面结构轮廓,提升用户体验。
<template>
<div>
<div v-if="loading" class="skeleton">
<div class="skeleton-header"></div>
<div class="skeleton-content"></div>
</div>
<div v-else>
<!-- 实际内容 -->
</div>
</div>
</template>
每种方法适用于不同场景,可根据具体需求选择合适的实现方式。简单交互使用 v-if/v-show,大型应用推荐使用路由懒加载或异步组件,需要精细控制时考虑第三方库或全局状态管理。







