angular - Cum pot apela o funcție din directivă după redarea componentului?
Cum pot să apel o funcție din directivă după redarea componentului?
Am componentă:
export class Component {
ngAfterContentInit() {
// How can i call functionFromDirective()?
}
}
Și vreau să apelez această funcție:
export class Directive {
functionFromDirective() {
//something hapenns
}
Cum pot să fac asta?
Răspuns #1
Poți prelua Directiva din șablonul Componentului cu ViewChild astfel:
@Directive({
...,
selector: '[directive]',
})
export class DirectiveClass {
method() {}
}
În componenta ta:
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()
}
}
Răspunsul #2
Apelarea metodei din interiorul unui component nu este o idee bună. Folosirea unei directive ajută la un design modular, dar atunci când apelezi metoda, obții o dependență de la component la directivă.
În schimb, directiva ar trebui să implementeze interfața AfterViewInit:
@Directive({
...,
selector: '[directive]',
})
export class DirectiveClass implements AfterViewInit {
ngAfterViewInit(): void {}
}
În acest fel, componenta ta nu trebuie să știe nimic despre directivă.
