如果我包含两个模块,它们都使用相同的选择器定义组件或指令(比如a[routerLink]
)。
ModuleA使用选择器a[routerLink]
ModuleB使用选择器a[routerLink]
AppModule包含两个模块,并在其模板中使用<a routerLink="..."></a>
。
然后使用哪个指令? Angular如何解决在运行时选择哪个组件/指令?行为是否记录在某处?
答案 0 :(得分:2)
您应该收到此错误消息
More than one component matched on this element.
Make sure that only one component's selector can match a given element.
Conflicting components: ${componentTypeNames.join(',')}
您需要确保将组件声明或导入到单个NgModule中不会发生冲突。
如果未在同一模块中导入或声明冲突的组件,则不会发生冲突。
另见https://github.com/angular/angular/issues/10552#issuecomment-242998180
答案 1 :(得分:1)
如果在两个单独的模块中声明了具有相同选择器的组件,Angular模板解析器将在整个应用程序树中查找最接近的组件。在这里,您可以看到工作示例(只需单击在descriptor.proto
内声明的第二个'hello'组件的链接:
StackBlitz - example of two components with same selector