首页 > 解决方案 > 预加载器vue.js的工作问题

问题描述

当我从一个组件转到另一个组件时,我正在尝试显示预加载器。我使用这个预加载器。我创建文件loader.js并在那里写:

import Vue from 'vue';
import Loading from 'vue-loading-overlay';
import 'vue-loading-overlay/dist/vue-loading.css';

Vue.use(Loading);

let loader = Vue.$loading.show({
    loader: 'dots',
    color: '#5D00FF',
    zIndex: 999,
}); 
function loaderStart() {
    loader;
}
function loaderEnd() {
    loader.hide();
}

export default {loaderStart, loaderEnd}

loader,js我导入到index.js那里,当我想调用加载程序启动但它没有启动(预加载程序中没有工作)时,我写ifbeforeResolve。这里是index.js

import Vue from 'vue'
import Router from 'vue-router'
import Authorization from '@/components/Authorization'
import Main from '@/components/Main'
import loader from './loader'

Vue.use(Router)

const router = new Router({
    routes: [
    {
        path: '/',
        name: 'Main',
        component: Main,
    },
    {
        path: '/authorization',
        name: 'Authorization',
        component: Authorization
    }
  ]
})
router.beforeResolve((to, from, next) => {
    if(to.path) {
        loader.loaderStart()
    }
    next()
});
router.afterEach((to, from) => {
    loader.loaderEnd()
});
export default router;

请帮我找出问题

标签: vue.jsvue-componentvue-routerpreloader

解决方案


  1. 您的 currentloader将只出现一次,因为您也调用了show一次方法。您需要在show每次loaderStart调用时调用方法并存储加载器:

    let loader = null;
    function loaderStart() {
        // it would be better to extract these values as constants 
        loader = Vue.$loading.show({
             loader: 'dots',
             color: '#5D00FF',
             zIndex: 999,
        }); 
    }
    function loaderEnd() {
        loader.hide();
    }
    
  2. 可能你有一些异步组件,因为你将加载器添加到路由逻辑,所以你应该使用beforeEach钩子而不是钩子beforeResolve

    router.beforeEach((to, from, next) => {
        loader.loaderStart()
        next()
    });
    router.afterEach((to, from) => {
       loader.loaderEnd()
    });
    

加载器 API 文档show方法)

Vue-路由器守卫

Vue-router 导航流程


推荐阅读