vue缺省页实现
实现 Vue 缺省页的常见方法
使用 v-if 或 v-show 控制显示
通过条件渲染指令动态切换缺省页与内容页。适用于数据加载前后状态的切换:
<template>
<div v-if="dataLoaded">正常内容</div>
<div v-else class="empty-state">缺省页内容(如图标+文字提示)</div>
</template>
封装可复用的缺省页组件
创建独立组件提高复用性,通过插槽和 Props 定制内容:

<!-- EmptyState.vue -->
<template>
<div class="empty-container">
<slot name="icon"><DefaultIcon /></slot>
<p>{{ message || '暂无数据' }}</p>
<slot name="action"></slot>
</div>
</template>
使用时通过 Props 传递提示信息或覆盖插槽:

<empty-state message="当前列表为空">
<template #action>
<button @click="refresh">刷新</button>
</template>
</empty-state>
结合路由实现全屏缺省页
通过路由守卫或组件内逻辑控制全屏缺省页,适合无权限访问等场景:
// 路由配置示例
{
path: '/protected',
component: () => import('ProtectedPage.vue'),
beforeEnter: (to, from, next) => {
hasPermission() ? next() : next('/empty');
}
}
第三方库快速集成
使用如 vue-empty 等现成库简化开发:
import VueEmpty from 'vue-empty';
Vue.use(VueEmpty);
// 模板中使用
<vue-empty :data="arrayData" empty-text="无数据"/>
样式与交互优化建议
- 添加加载动画过渡效果,避免生硬的切换
- 缺省页中提供操作按钮(如刷新/创建条目)增强用户体验
- 移动端适配需考虑最小高度和触控区域
- 通过 CSS 变量实现主题色动态切换
典型代码结构示例
<template>
<div>
<div v-if="list.length > 0">
<!-- 正常内容渲染 -->
</div>
<empty-state
v-else
:type="error ? 'error' : 'empty'"
@retry="fetchData"
/>
</div>
</template>
<script>
export default {
data() {
return {
list: [],
error: false
}
},
methods: {
async fetchData() {
try {
this.list = await api.getList();
} catch {
this.error = true;
}
}
}
}
</script>






