我在这里有一个特定的用例 . 我有一个包含大量页面的大型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: {} 对象 .