您能否解释一下Vue为什么在这里告诉我Unknown custom element: <MyComponent> - did you register the component correctly?
:
const CustomComponent = Vue.component('CustomComponent', {
template: '<div>test</div>'
})
const RenderComponent = Vue.component('RenderComponent', {
props: {
component: {
type: [Function, String]
}
},
template: '<component :is="component"></component>'
})
new Vue({
el: '#app',
components: {
MyComponent: CustomComponent,
RenderComponent
},
template: '<render-component component="MyComponent"></render-component>'
})
https://jsfiddle.net/2qobuj4y/1/
如何在此处将组件正确传递给道具?有例子吗?
答案 0 :(得分:1)
MyComponent
不存在,因此您不想在应用程序的components
中列出它。将您的应用代码更改为:
new Vue({
el: '#app',
components: {
CustomComponent, // Not actually being used, the template passes a string
RenderComponent
},
template: '<render-component component="CustomComponent"></render-component>'
})
说明
您已在主CustomComponent
组件中将MyComponent
正确注册为app
,并且可以直接在其模板中使用它。但是,然后您还将具有值“ MyComponent”的字符串传递给RenderComponent
组件。 RenderComponent
然后尝试实例化一个MyComponent
组件,但是在它正在寻找的全局范围中不存在任何组件。 (该名称仅在您注册的主要app
组件中存在该名称。)
或者,如果您在传递MyComponent
时使用绑定代替(即:component
而不是component
),则仍然无法工作,因为您无法传递{{1 }}作为道具。
(编辑:您可以但不可以使用传统方式。这有效:components
。请参见this comment from Evan You)
有趣的选择
您提到改为尝试从:foo="$options.components.foo"
传递它,虽然我不能说这是否是一个好习惯,但它确实有效。如果您曾经迁移到无法访问全局范围的单文件组件,这可能会变得更糟,这有些令人困惑,但确实可以:
data