В этом посте давайте посмотрим, как получить экземпляр директивы/дочернего компонента Angular 2 внутри класса родительского компонента.

ViewChild в действии

Для выполнения этого требования можно использовать декоратор ViewChild.
ViewChild принимает либо тип директивы, либо ссылочную переменную шаблона в качестве аргумента и устанавливает экземпляр директивы в целевое свойство после представления. инициироваться.

@Component({
  selector: 'child-cmp',
  template: 'child'
})
class ChildCmp {
  doSomething() {}
}
@Component({
  selector: 'some-cmp',
  template: '<child-cmp></child-cmp>',
  directives: [ChildCmp]
})
class SomeCmp {
  @ViewChild(ChildCmp) child:ChildCmp;
  ngAfterViewInit() {
    // child is set
    this.child.doSomething();
  }
}
}

ViewChild установит целевое свойство после визуализации представления компонента, поэтому доступ к свойству до того, как представление будет инициировано, вернет недопустимый результат.

Вы можете использовать хук жизненного цикла ngViewAfterInit, чтобы идентифицировать инициализацию представления.

Аргумент в качестве типа директивы и переменная шаблона
Использование аргумента в качестве переменной шаблона ViewChild лучше всего с моей точки зрения, поскольку он обеспечивает доступ к конкретному экземпляру директивы при наличии более одной директивы в шаблоне.

@Component({
   selector: 'some-cmp',
   template: '<child-cmp #child></child-cmp>',
   directives: [ChildCmp]
})
class SomeCmp {
   @ViewChild('child') child:ChildCmp;
   ngAfterViewInit() {
    // child is set
    this.child.doSomething();
   }
}

Удачного сценария..