nprogress
- 安装
npm install --save nprogress
- 使用
import NProgress from 'nprogress' // 引入nprogress插件
import 'nprogress/nprogress.css' // 这个nprogress样式必须引入
// axios请求拦截器
axios.interceptors.request.use(
config => {
NProgress.start() // 设置加载进度条(开始..)
return config
},
error => {
return Promise.reject(error)
}
)
// axios响应拦截器
axios.interceptors.response.use(
function(response) {
NProgress.done() // 设置加载进度条(结束..)
return response
},
function(error) {
return Promise.reject(error)
}
)
写在axios的请求拦截器和响应拦截器里,每次只要触发axios请求就加载进度条
或者网上很多人写在了router.beforeEach和router.afterEach,这种写法只能切换路由时才有效果。
个人感觉写在axios的请求拦截器和响应拦截器里比较好,因为切换路由一般都会触发页面的created()事件发起axios请求
//导入
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
router.beforeEach((to, from, next) => {
NProgress.start()
next()
})
router.afterEach(() => {
NProgress.done()
})
最好在index.html也写上,单页面首次打开速度慢,这样写打开登陆页时也才会显示!
<script>
NProgress.start()
// 给页面设置请求加载进度条效果
window.onload = function() {
NProgress.done()
}
</script>
可以更改设置样式
配置NProgress:
- showSpinner:进度环显示隐藏
NProgress.configure({showSpinner: false});
- ease:调整动画设置,ease可传递CSS3缓冲动画字符串(如ease、linear、ease-in、ease-out、ease-in-out、cubic-bezier)。speed为动画速度(单位ms)。
NProgress.configure({ease:'ease',speed:500});
- minimum:设置最低百分比
NProgress.configure({minimum:0.3});
- 百分比:通过设置progress的百分比,调用 .set(n)来控制进度,其中n的取值范围为0-1。
NProgress.set(0.4);