在前端开发工作中,请求接口时,为了提高页面的观赏性和用户的体验,我们会在页面上添加loading来阻止用户操作来等待接口的返回。
首先我们需要引入element-ui的Loading组件,这个组件有两种调用方式:
1、通过指令v-loading
2、通过服务Loading.service();
目的:实现局部loading加载效果,如果使用方法2会整个页面都出现加载效果,这里我只想在路由切换区域局部出现加载效果,故采用方法1 v-loading
使用方法1时存在问题,报错Can‘t resolve ‘element-plus/es/components/loading-directive/style/index‘
解决办法:这里采用自定义load指令,给Element-Plus提供的指令基础上再封装一层(其他解决方法可参考:element-plus(1.3.0-beta.5)按需引入,v-loading报错 - 掘金 (juejin.cn)):
main.js文件:
import { createApp } from 'vue'
import { vLoading } from 'element-plus/es/components/loading/src/directive' // 按需引入loading组件
const app = createApp(App)
app.directive('load', vLoading) // 自定义load指令
使用自定义指令,在请求某个接口的时候,将 loading 改为true,当接口请求后改为false,这样就能实现loading的过渡效果了。
loading 可以存储在vuex中,在index.vue中使用computed监听loading变化实现显示隐藏效果。
使用指令,computed监听loading的状态。
Vuex 中 state 是动态更新的,也就是不管在任何地方对某一个state的值做了修改,那么依赖该数据的 DOM 也将会发生改变。
store
loading.js
axios.js
这里setTimeout仅用于查看效果,实际开发中要去掉