【问题标题】:Problems with the work of preloader vue.js预加载器vue.js的工作问题
【发布时间】:2019-11-10 18:22:17
【问题描述】:

当我从一个组件转到另一个组件时,我正在尝试显示预加载器。我用这个preloader。我创建文件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,当我想调用加载器启动但它没有启动时我写了(beforeResolve 中的if 预加载器正在工作)。这里是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;

请帮我找出问题

【问题讨论】:

  • 您想通过if 条件实现什么目标?
  • @MatJ 当我们转到另一个 rourer 运行方法时,像这样
  • 如果那么删除它?
  • @MatJ 然后我只看到预加载器,它涵盖了页面上的其余内容并且它不会停止

标签: vue.js vue-component vue-router preloader


【解决方案1】:
  1. 您当前的loader 将只出现一次,因为您也调用了一次show 方法。您需要在每次 loaderStart 调用时调用 show 方法并存储加载程序:

    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()
    });
    

Loader API docsshow 方法)

Vue-router guards

Vue-router navigation flow

【讨论】:

  • @МаксимБуяков 这是一个代码框示例(计时器仅用于演示)codesandbox.io/s/vue-routing-example-syx2u
  • 是的,原来它只是没有时间展示自己)设置超时它看起来还可以。但是你能告诉我一件事吗:如果我想显示预加载器,但不想每次都显示 2 秒(它应该只显示页面加载的时间),我需要编写一些“知道”页面时的代码加载结束是否设置超时?
  • 不,在这种情况下你根本不应该使用setTimeout,我添加它只是为了演示以显示加载器工作。如果您没有一些延迟加载的组件,它将永远不会显示。在您的问题示例中,您的页面组件将捆绑在一个程序集(文件)中,这就是未显示您的加载程序的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
相关资源
最近更新 更多