在我的项目中,有许多"基本"组件类,而且,项目将被划分为几个其他模块,在这些模块中,我只想使用共享模块作为基本类源。
我希望可以在app.module
中只使用一个简单的import { SharedModule }
声明,避免在组件后代中导入许多基本组件类,但是发生了错误。
(我对这个问题进行了编辑,使其更加精确。)
示例:
// base.component.ts
@Component({ selector: 'app-base', ...})
export class BaseComponent {}
// shared.module.ts
import { CommonModule } from '@angular/common';
import { BaseComponent } from './base/base.component';
@NgModule({
imports: [CommonModule],
declarations: [BaseComponent],
exports: [BaseComponent],
})
export class SharedModule {}
// app.module.ts
import { HelloComponent } from './hello.component';
import { SharedModule } from './shared/shared.module';
@NgModule({
imports: [..., SharedModule],
declarations: [AppComponent, HelloComponent],
bootstrap: [AppComponent],
})
export class AppModule {}
我知道这是可行的(但不是我的预期用途):
// hello.component.ts
@Component({ template: `<app-base></app-base>` })
export class HelloComponent {}
我也以为会有用,但没用:
// hello.component.ts
@Component({...})
export class HelloComponent extends BaseComponent {} // <-- Cannot find name 'BaseComponent'
angular是否允许以上述简单的方式使用基类?(即每个组件后代中没有import { BaseComponent }
)
2条答案
按热度按时间5m1hhzi41#
首先,使用sharedModule通常是一个陈旧的不良做法,最好使用SCAM(单组件Angular 模块)或独立组件。
不管怎样,如果你想扩展BaseComponent,你可以这样做,但是如果你不打算使用BaseComponent本身,你必须将它导入
import { BaseComponent } from './base/base.component';
,不需要在任何模块中声明它,你只需要声明HomeComponent9w11ddsr2#
查看this完整教程。
将共享模块中的组件用作子组件中的基类:
在“child.component.ts”文件中,使用extends关键字扩展基本组件:
确保您使用的是相应模板文件中父零部件的选择器。
在模板中的任意位置使用hello组件:在要使用hello组件的模板中,使用hello组件的选择器包括hello组件: