Vue路由器动态组件

时间:2018-12-10 12:28:36

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

我对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));

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

任何想法都很好

1 个答案:

答案 0 :(得分: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');
   }
}