我正在制作一个管理面板,用于管理几个网站。我的vue路由器路由都以网站slug作为前缀,路由器上有一个beforeach,它将website_slug
设置为相应的vuex状态。
每个站点将使用大多数相同的组件,但也将有几个站点具有自定义页面组件。
对于这种情况,我创建了一个名为importOrDefault
的函数,如下所示:
const importOrDefault = (componentName, store) => {
return import(/* webpackChunkName: "[request]" */ `./Pages/${store.getters.website.slug}/${componentName}`)
.catch(() => import(/* webpackChunkName: "[request]" */ `./Pages/_shared/${componentName}`));
};
我在路由器配置中使用的配置如下:
{
path: '/:website_slug/',
name: 'dashboard',
component: () => importOrDefault('Dashboard', store)
}
这个设置在加载时效果很好。但是,当我导航到另一个
:website_slug
时,不会重新评估该组件,并加载与上一个站点相同的组件。但国家已经改变了,所以这不是问题所在。有没有一种方法可以让路由器组件重新评估功能,或者我是否遗漏了一些可以用于此的明显功能?
最佳答案
Vue路由器尽量重用组件。您是否尝试将beforeRouteUpdate
添加到组件以显式设置数据(与使用mounted或其他方式相比)?还可以将组件的key
属性设置为显式的值(如website_slug
值),以确保组件不被重用。
我个人更喜欢尽可能使用key
。
见:https://github.com/vuejs/vue-router/issues/1490beforeRouteUpdate
方法:https://jsfiddle.net/Linusborg/L7hscd8h/2208/key
方法:https://jsfiddle.net/Linusborg/L7hscd8h/1528/
关于javascript - 重新评估vue-route更改中的动态导入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56752982/