我正在构建一个支持多个设计模板的编辑器应用程序。每个设计模板都有截然不同的字段集,因此它们都有自己的.vue文件。
我正在尝试根据参数动态加载相应的视图组件文件。所以访问/editor/yellow-on-black会加载views/designs/yellow-on-black.vue等等。
我一直在尝试这样做
{
path: '/editor/:design',
component: () => {
return import(`../views/designs/${route.params.design}`)
}
}
Run Code Online (Sandbox Code Playgroud)
但当然route没有定义。关于如何解决这个问题有什么想法吗?
该路线的component选项仅评估一次,因此不起作用。这是使用视图的解决方案,Dynamic.vue该视图使用基于路由参数的动态组件。
使用带有路由参数的简单路由定义。我将参数名称更改为dynamic:
import Dynamic from '@/views/Dynamic.vue';
{
path: "/editor/:dynamic",
component: Dynamic
}
Run Code Online (Sandbox Code Playgroud)
创建一个通用Dynamic.vue组件,从路由参数动态加载组件。它期望调用该参数dynamic:
<template>
<component v-if="c" :is="c" :key="c.__file"></component>
</template>
Run Code Online (Sandbox Code Playgroud)
<script>
export default {
data: () => ({
c: null
}),
methods: {
updateComponent(param) {
// The dynamic import
import(`@/components/${param}.vue`).then(module => {
this.c = module.default;
})
}
},
beforeRouteEnter(to, from, next) {
// When first entering the route
next(vm => vm.updateComponent(to.params.dynamic));
},
beforeRouteUpdate(to, from, next) {
// When changing from one dynamic route to another
this.updateComponent(to.params.dynamic);
next();
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1842 次 |
| 最近记录: |