我正在尝试遵循https://material.angular.io/components/component/dialog上的文档,但我不明白为什么它会出现以下问题?
我在我的组件上添加了以下内容:
@Component({
selector: 'dialog-result-example-dialog',
templateUrl: './dialog-result-example-dialog.html',
})
export class DialogResultExampleDialog {
constructor(public dialogRef: MdDialogRef<DialogResultExampleDialog>) {}
}
在我的模块中我添加了
import { HomeComponent,DialogResultExampleDialog } from './home/home.component';
@NgModule({
declarations: [
AppComponent,
LoginComponent,
DashboardComponent,
HomeComponent,
DialogResultExampleDialog
],
// ...
然而我得到了这个错误...
EXCEPTION: Error in ./HomeComponent class HomeComponent - inline template:53:0 caused by: No component factory found for DialogResultExampleDialog. Did you add it to @NgModule.entryComponents?
ErrorHandler.handleError @ error_handler.js:50
next @ application_ref.js:346
schedulerFn @ async.js:91
SafeSubscriber.__tryOrUnsub @ Subscriber.js:223
SafeSubscriber.next @ Subscriber.js:172
Subscriber._next @ Subscriber.js:125
Subscriber.next @ Subscriber.js:89
Subject.next @ Subject.js:55
EventEmitter.emit @ async.js:77
NgZone.triggerError @ ng_zone.js:329
onHandleError @ ng_zone.js:290
ZoneDelegate.handleError @ zone.js:246
Zone.runTask @ zone.js:154
ZoneTask.invoke @ zone.js:345
error_handler.js:52 ORIGINAL EXCEPTION: No component factory found for DialogResultExampleDialog. Did you add it to @NgModule.entryComponents?
ErrorHandler.handleError @ error_handler.js:52
next @ application_ref.js:346
schedulerFn @ async.js:91
SafeSubscriber.__tryOrUnsub @ Subscriber.js:223
SafeSubscriber.next @ Subscriber.js:172
Subscriber._next @ Subscriber.js:125
Subscriber.next @ Subscriber.js:89
Subject.next @ Subject.js:55
EventEmitter.emit @ async.js:77
NgZone.triggerError @ ng_zone.js:329
onHandleError @ ng_zone.js:290
ZoneDelegate.handleError @ zone.js:246
Zone.runTask @ zone.js:154
ZoneTask.invoke @ zone.js:345
发布于 2017-02-16 19:31:51
您需要在@NgModule
下使用entryComponents
。
这适用于使用ViewContainerRef.createComponent()
添加的动态添加的组件。将它们添加到entryComponents会告诉离线模板编译器编译它们并为它们创建工厂。
在路由配置中注册的组件也会自动添加到entryComponents
,因为router-outlet
还使用ViewContainerRef.createComponent()
将路由组件添加到DOM。
因此,您的代码将如下所示
@NgModule({
declarations: [
AppComponent,
LoginComponent,
DashboardComponent,
HomeComponent,
DialogResultExampleDialog
],
entryComponents: [DialogResultExampleDialog]
发布于 2019-02-14 22:23:06
您必须将其添加到docs中指定的entryComponents
。
@NgModule({
imports: [
// ...
],
entryComponents: [
DialogInvokingComponent,
DialogResultExampleDialog
],
declarations: [
DialogInvokingComponent,
DialogResultExampleDialog
],
// ...
})
下面是一个应用程序模块文件的a full example,其中包含一个定义为entryComponents
的对话框。
发布于 2018-06-12 09:19:49
如果你像我一样,盯着这个帖子想:“但我不是想要添加一个组件,我只是想要添加一个卫士/服务/管道,等等。”那么问题很可能是您向路由路径添加了错误的类型。这就是我所做的。我意外地将保护添加到路径的component:部分,而不是canActivate:部分。我喜欢IDE自动完成,但你必须放慢速度,注意一下。如果你绝对找不到它,就对它抱怨的名字进行全局搜索,并查看每一个用法,以确保你没有漏掉一个名字。
https://stackoverflow.com/questions/41519481
复制相似问题