如何在组件渲染后从指令调用函数?

时间:2016-11-11 14:18:09

标签: angular typescript angular2-directives angular2-components

如何在组件渲染后调用指令中的函数?

我有组件:

export class Component {
  ngAfterContentInit() {
  // How can i call functionFromDirective()?
  }
}

我想要调用这个函数:

export class Directive {

functionFromDirective() {
//something hapenns
}

我该怎么做?

2 个答案:

答案 0 :(得分:6)

您可以使用ViewChild从组件的模板中检索指令,如下所示:

@Directive({
  ...,
  selector: '[directive]',
})
export class DirectiveClass {
  method() {}
}

在您的组件中:

import { Component, ViewChild } from '@angular/core'
import { DirectiveClass } from './path-to-directive'

@Component({
  ...,
  template: '<node directive></node>'
})
export class ComponentClass {
  @ViewChild(DirectiveClass) directive = null

  ngAfterContentInit() {
    // How can i call functionFromDirective()?
    this.directive.method()
  }
}

答案 1 :(得分:3)

从组件中调用方法不是一个好主意。使用指令有助于模块化设计,但是当您调用该方法时,您将获得从组件到指令的依赖关系。

相反,该指令应该实现AfterViewInit接口:

$row['DisplayName']

这样,您的组件就不必了解该指令。