【问题标题】:Vue router dynamic componentVue路由器动态组件
【发布时间】:2018-12-10 12:28:35
【问题描述】:

我在某个部分被 vue-router 卡住了,我不知道该怎么做,也找不到任何对我有用的东西,我不确定它是否适用于旧版本或其他东西。

我的问题: 我有一个适用于 2 个不同网站的 Vue 应用程序,例如: example.nl 和 example.be 。 现在对于这两个站点,我都有一个 siteId。我可以从 vuex 获得那个 id。

const siteId = store.getters.siteId;

现在我想根据 siteId 在路由上加载组件。

示例:

import {store} from '@/plugins/vuex_store';

const siteId = store.getters.siteId;
import test from 'nl/test'; 


if(siteId === 2) {
    import test from 'be/test'; <-- thows error 'statement expected'.
}

let router = ({
    path: 'exmaple',
    name: 'example',
    component: test,
});

export default router;

我尝试了以下几种方法:

import("nl/test").then(foo => console.log(foo.default));

但这给了我一个语法错误。

任何想法都会很好

【问题讨论】:

    标签: javascript vue.js import vuejs2 vue-router


    【解决方案1】:

    我可能会为您提供 3 个解决方案。我自己不确定解决方案 2。

    const siteId = store.getters.siteId;
    let loadSite = () => import ('nl/test'); 
    
    
    if(siteId === 2) {
        loadSite = () => import ('be/test'); 
    }
    
    let router = ({
        path: 'exmaple',
        name: 'example',
        component: loadSite,
    });
    

    或

    const siteId = store.getters.siteId;
    const loadSite1 = () => import ('nl/test'); 
    const loadSite2 = () => import ('be/test'); 
    
    let router = ({
        path: 'exmaple',
        name: 'example',
        component: (siteId === 1) ? loadSite1 : loadSite2,
    });
    

    或

        const loadSite1 = () => import ('nl/test'); 
        const loadSite2 = () => import ('be/test'); 
    
        let router = ({
            path: 'example',
            name: 'example',
        }, {
            path: 'site1',
            name: 'site1',
            component: loadSite1,
        }, {
            path: 'site2',
            name: 'site2',
            component: loadSite2,
        });
    
    router.beforeEach((to, from, next) => {
       if (to.path.example === 'example') {
          if(store.getters.siteId === 1) return next('site1');
          else if(store.getters.siteId === 2) return next('site2');
       }
    }
    

    【讨论】:

    • 这对我不起作用,因为我在编译时遇到语法错误,就像我在问题中描述的那样。我尝试了一个新的 CLI 3 项目并且确实有效,所以我想我需要升级到更新的 Vue 项目模板
    • 你的 router.js 导入应该是这样的:import Vue from "vue"; import Router from "vue-router"; 。你得到什么语法错误?
    猜你喜欢
    • 2019-06-16
    • 2021-08-29
    • 2020-07-30
    • 2019-12-05
    • 1970-01-01
    • 2018-08-07
    • 2020-05-09
    • 2019-05-24
    • 1970-01-01
    相关资源
    最近更新 更多