首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Angular2材质对话框有问题-您是否已将其添加到@NgModule.entryComponents?

Angular2材质对话框有问题-您是否已将其添加到@NgModule.entryComponents?
EN

Stack Overflow用户
提问于 2017-01-07 16:34:30
回答 6查看 155.8K关注 0票数 241

我正在尝试遵循https://material.angular.io/components/component/dialog上的文档,但我不明白为什么它会出现以下问题?

我在我的组件上添加了以下内容:

代码语言:javascript
复制
@Component({
  selector: 'dialog-result-example-dialog',
  templateUrl: './dialog-result-example-dialog.html',
})
export class DialogResultExampleDialog {
  constructor(public dialogRef: MdDialogRef<DialogResultExampleDialog>) {}
}

在我的模块中我添加了

代码语言:javascript
复制
import { HomeComponent,DialogResultExampleDialog } from './home/home.component';

@NgModule({
  declarations: [
    AppComponent,
    LoginComponent,
    DashboardComponent,
    HomeComponent,
    DialogResultExampleDialog
  ],

// ...

然而我得到了这个错误...

代码语言:javascript
复制
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
EN

回答 6

Stack Overflow用户

发布于 2017-02-16 19:31:51

您需要在@NgModule下使用entryComponents

这适用于使用ViewContainerRef.createComponent()添加的动态添加的组件。将它们添加到entryComponents会告诉离线模板编译器编译它们并为它们创建工厂。

在路由配置中注册的组件也会自动添加到entryComponents,因为router-outlet还使用ViewContainerRef.createComponent()将路由组件添加到DOM。

因此,您的代码将如下所示

代码语言:javascript
复制
@NgModule({
  declarations: [
    AppComponent,
    LoginComponent,
    DashboardComponent,
    HomeComponent,
    DialogResultExampleDialog        
  ],
  entryComponents: [DialogResultExampleDialog]
票数 53
EN

Stack Overflow用户

发布于 2019-02-14 22:23:06

您必须将其添加到docs中指定的entryComponents

代码语言:javascript
复制
@NgModule({
  imports: [
    // ...
  ],
  entryComponents: [
    DialogInvokingComponent, 
    DialogResultExampleDialog
  ],
  declarations: [
    DialogInvokingComponent,   
    DialogResultExampleDialog
  ],
  // ...
})

下面是一个应用程序模块文件的a full example,其中包含一个定义为entryComponents的对话框。

票数 1
EN

Stack Overflow用户

发布于 2018-06-12 09:19:49

如果你像我一样,盯着这个帖子想:“但我不是想要添加一个组件,我只是想要添加一个卫士/服务/管道,等等。”那么问题很可能是您向路由路径添加了错误的类型。这就是我所做的。我意外地将保护添加到路径的component:部分,而不是canActivate:部分。我喜欢IDE自动完成,但你必须放慢速度,注意一下。如果你绝对找不到它,就对它抱怨的名字进行全局搜索,并查看每一个用法,以确保你没有漏掉一个名字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41519481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档