Angular如何让一个组件选择器被另一个组件识别?
问题:无法识别
<app-two>选择器 我有一个xxx.component文件,代码如下:
@Component({ selector: 'app-two', template: '<p>hello</p>', }) export class MyTwoComponent { constructor() {} } @Component({ selector: 'app-my', template: '<app-two></app-two>', // >>>>无法识别该选择器 }) export class MyPanelComponent extends MyTwoComponent { constructor() { super(); } }
系统报错,提示无法识别<app-two>选择器。尝试使用NgModule但情况更糟,求解决建议。
更新1
我找到了一个解决方案!但它需要改为独立组件(standalone),而我当前场景无法这么做……
@Component({ selector: 'app-two', standalone: true, template: '<p>hello</p>', }) export class MyTwoComponent { constructor() {} } @Component({ imports: [MyTwoComponent], selector: 'app-my', standalone: true, template: '<app-two></app-two>', }) export class MyPanelComponent extends MyTwoComponent { constructor() { super(); } }
解决建议(非独立组件方案)
不用改成独立组件,只要正确配置NgModule就能解决问题:
- 确保组件在NgModule中声明
创建或修改对应的NgModule,将MyTwoComponent和MyPanelComponent都加入到declarations数组中。如果这个模块要被其他模块引用,还需要把组件加入exports数组。
示例代码:
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { MyTwoComponent, MyPanelComponent } from './xxx.component'; // 按需调整路径 @NgModule({ declarations: [ MyTwoComponent, MyPanelComponent ], imports: [ CommonModule ], // 若其他模块需使用这两个组件,添加以下导出配置 exports: [ MyTwoComponent, MyPanelComponent ] }) export class YourCustomModule { }
- 排查NgModule使用问题
之前用NgModule没解决,大概率是以下原因:- 没有把
MyTwoComponent声明在MyPanelComponent所在的模块中 - 如果
MyTwoComponent在另一个模块,没有在当前模块的imports数组中导入那个模块 - 组件路径导入错误,导致NgModule没正确关联到组件
- 没有把
注意:组件继承和选择器识别无关,Angular完全依赖NgModule的声明/导入配置来识别组件选择器。
内容的提问来源于stack exchange,提问作者Kaspacainoombro
相关产品推荐
相关产品推荐

