不能使用在 "CoreModule" 中声明的组件,但可以使用服务

Cannot use a Component declared in a "CoreModule" but can use services

我正在尝试遵循 angular 文档,以便我只有一个特定模块的实例。特别是 CoreModule and the SharedModule 部分。

上面链接底部的演示仅适用于在 AppModule 中导入一次 CoreModule,其中延迟加载的 HeroesModuleHeroComponent 可以引用 UserServiceCoreModule

中声明

我的问题是在尝试使用已声明并从 "CoreModule" 中导出的组件时出现的。

例如,默认 HeroComponent 的工作方式如下:

// Exact copy except import UserService from core
import { Component }   from '@angular/core';

import { HeroService } from './hero.service';
import { UserService } from '../core/user.service';

@Component({
  template: `
    <h2>Heroes of {{userName}}</h2>
    <router-outlet></router-outlet>
  `,
  providers: [ HeroService ]
})
export class HeroComponent {
  userName = '';
  constructor(userService: UserService) {
    this.userName = userService.userName;
  }
}

但如果我修改它以包含 CoreModule 中声明的 app-title 组件,它会因错误 'app-title' is not a known element

而中断
// Exact copy except import UserService from core
import { Component }   from '@angular/core';

import { HeroService } from './hero.service';
import { UserService } from '../core/user.service';

@Component({
  template: `
    <h2>Heroes of {{userName}}</h2>
    <router-outlet></router-outlet>
    <app-title></app-title>
  `,
  providers: [ HeroService ]
})
export class HeroComponent {
  userName = '';
  constructor(userService: UserService) {
    this.userName = userService.userName;
  }
}

我从下面的 angular.io 文档中复制了示例,并且只修改了 app/hero/hero.component.ts 模板以包含 <app-title></app-title>

示例:在应用加载后单击 "Heroes" 按钮

https://plnkr.co/edit/SZOEvdRCT23S4DfbGmut?p=preview

编辑:第二个示例,在应用加载后单击 "Contact"

https://stackblitz.com/edit/angular-2ym6ya?file=contact/contact.component.html

任何关于从 CoreModule 获取组件以在延迟加载模块中工作的建议,或关于为什么我不希望它工作的信息,将不胜感激。

要使用模块中的组件、指令或管道,您需要将提供它们的模块添加到 imports: [...]每个 使用它们的模块.

如果由 AppModule 提供或导入服务,则在应用程序根范围内提升服务,或者在导入它们的延迟加载模块的根范围内(延迟加载模块将子范围引入应用程序根范围),因此只需导入一次。

https://stackblitz.com/edit/angular-ds2rce?file=core%2Fcore.module.ts