我在这里有一个特定的用例 . 我有一个包含大量页面的大型Vue应用程序 . 每个页面都有一个page-id,用于在服务器上标识它并加载它的内容 . 这些ID位于路由器路径( parent-id/child-id/another-child-page-id
)中 . 在页面组件本身上,我显示页面 Headers . 不幸的是,页面 Headers 的翻译键与页面ID之间没有相关性 .
现在,我没有在页面ID和页面 Headers 翻译之间创建我必须手动维护的映射,我想我可以在路由器配置中查找路由并要求组件:
{
path: 'the-page',
name: 'ThePage',
component: resolve => require.ensure([], () => resolve(require('@/pages/ParentPage/ChildPage/ThePage')), 'parent-page')
}
这通过递归遍历路由来查找page-id,然后在promise中加载组件:
// find the route definition
const route = findRouteByPath(file.areaName)
// load the route component
new Promise(resolve => { route.component(resolve) })
.then(component => {
console.log(component)
})
这给了我这样的组件:
Object {
mixins: Array(1),
staticRenderFns: Array(0), __file: "/the/file/path.vue",
beforeCreate: Array(1),
beforeDestroy: Array(1),
components: Object,
mixins: Array(1),
render: function (),
// etc.
}
如果我调用render函数,我会收到一个错误:
Uncaught(in promise)TypeError:无法读取未定义的属性'_c'
我想要做的是以编程方式呈现组件并从组件中获取插槽 page-title
的内容 .
有人能帮忙吗?
Update 1
Vue.extend()
然后安装似乎做我想要的 . 问题是,我得到各种错误,因为页面依赖于某些事物,如当前路线 . 我也有点担心触发某些会触发API调用的_钩子等等 . 我目前的状态是试图摆脱mixins和hooks,如下所示:
const strippedComponent = Object.assign(component, {
mixins: [],
components: {},
beforeCreate: []
})
const Constructor = Vue.extend(strippedComponent)
const vm = new Constructor({})
但我还没到那里 .
Update 2 我最后放弃了这个并且通过在我存储诸如页面 Headers 翻译键和其他好东西之类的东西的每条路线中添加一个 meta: {}
对象 .