Angular 9 - 指令,如何从组件读取属性



这段代码适用于 Angular 8,但不适用于 Angular 9+。 在以下 HTML 组件中,BreadcrumbComponent 存在一个指令 appBreadcrumbs:

<ng-template appBreadcrumbs
let-breadcrumb
let-i="index">
<li>
some stuff
</li>
</ng-template>

该指令具有以下代码:

@Directive({
selector: '[appBreadcrumbs]'
})
export class BreadcrumbsDirective {
constructor(
private view: ViewContainerRef,
private templateRef: TemplateRef<any>
) {
// someAttribute is a @Input attribute in BreadcrumbComponent
const attributeFromBreadcrumbComponent = this.templateRef['_parentView'].component.someAttribute;
}

在Angular 9中,"_parentView"不存在。如何传递属性?我尝试了以下方法,但它不起作用:

<ng-template appBreadcrumbs
[someAttribute]="someAttribute"
@Directive({
selector: '[appBreadcrumbs]'
})
export class BreadcrumbsDirective {
@Input() someAttribute: string;

注意:此指令用于许多组件。

提前谢谢。 问候。

最后,我在这里找到了解决方案: 如何从 Angular 9 中的子组件访问父组件

无需将属性作为输入传递给指令。

parent: BreadcrumbComponent;
constructor(
private view: ViewContainerRef,
private templateRef: TemplateRef<any>,
private store: Store<any>,
private _injector: Injector
) {
this.parent = this._injector.get<BreadcrumbComponent>(BreadcrumbComponent);
// The attributes are accesible with this.parent.someAttribute
}