如果这是某人的问题的副本,我对此表示抱歉,但是我找不到解决问题的方法。
我需要通过路由器树访问组件的方法。我知道通常的做法是通过服务绑定功能,但是我使用的是ViewContainerRef
和ElementRef
,它们需要从需要访问的组件中提供。
我有某种方法的父组件。当我调用它时,我需要调用一个方法直到鹿特丹树。
parent.component.ts
export class ParentComponent {
childComponent: ChildComponent;
constructor(
private activatedRoute: ActivatedRoute
) {
this.activatedRoute.url.subscribe(data => {
this.childComponent = this.activatedRoute.snapshot.firstChild.component;
this.childComponent.someMethod() // not working
});
}
}
child.component.ts
export class ChildComponent {
constructor() { }
someMethod() {
console.log('Method Called');
}
}
我也尝试使用ViewChild
,但是ChildComponent
不是父母的一部分,所以它总是undefined
。如何获得ChildComponent方法?
答案 0 :(得分:0)
我相信您可以使用ComponentFactoryResolver
(@angular/core
)实例化组件并调用其公共方法。
export class ParentComponent {
constructor(private activatedRoute: ActivatedRoute, private resolver: ComponentFactoryResolver) {
this.activatedRoute.url.subscribe(data => {
const child = this.activatedRoute.snapshot.firstChild.component;
// ... validations
const cfactory = this.resolver.resolveComponentFactory(<any>child);
console.log(cfactory.componentType.prototype['someMethod']());
});
}
}
但这是一个简单的技巧。 必须有一种更好的方法来实现您要达到的目标。