Angular 7:通过路由器访问组件方法

时间:2019-05-20 09:38:15

标签: angular typescript angular-router

如果这是某人的问题的副本,我对此表示抱歉,但是我找不到解决问题的方法。

我需要通过路由器树访问组件的方法。我知道通常的做法是通过服务绑定功能,但是我使用的是ViewContainerRefElementRef,它们需要从需要访问的组件中提供。

我有某种方法的父组件。当我调用它时,我需要调用一个方法直到鹿特丹树。

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方法?

1 个答案:

答案 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']());

    });
  }
}

但这是一个简单的技巧。 必须有一种更好的方法来实现您要达到的目标。