J'ai besoin de la fonction de composant de la barre latérale dans la barre latérale.
mon composant d'en-tête
testFunction() {
console.log('value');
}
composant de la barre latérale
import { Component, OnInit, Input,ViewChild } from '@angular/core';
import { SidebarComponent } from '../sidebar/sidebar.component';
@ViewChild(SidebarComponent) SidebarComponent;
ngOnInit() {
this.SidebarComponent.testFunction();
}
J'ai ajouté un bloc de code essentiel à des fins de compréhension. lorsque j'utilise l'erreur de code ci-dessus, dit,
ERROR TypeError: Impossible de lire la propriété 'testFunction' de undefined à HeaderComponent.push ../ src / app / layout / components / header / header.component.ts.HeaderComponent.ngOnInit (header.component.ts: 57)
pouvez-vous m'aider à résoudre ce problème?
3 Réponses :
appelez-le après l'initialisation de la vue enfant.
@ViewChild(SidebarComponent) sidebarComponent: SidebarComponent;
ngAfterViewInit() {
this.sidebarComponent.testFunction();
}
Pour le partage de fonctions dans Angular, il est préférable d'utiliser un service et d'appeler ses fonctions dans les deux composants.
import { SharedService } from '../shared.service';
import { Component, OnInit } from '@angular/core';
@Component({
selector: '.....',
templateUrl: '.......',
styleUrls: ['........']
})
export class Component2 implements OnInit{
constructor(private sharedService: SharedService) { }
ngOnInit() {
this.sharedService.sharedFunction();
}
}
Et dans les deux composants, component1:
import { SharedService } from '../shared.service';
import { Component, OnInit } from '@angular/core';
@Component({
selector: '.....',
templateUrl: '.......',
styleUrls: ['........']
})
export class Component1 implements OnInit{
constructor(private sharedService: SharedService) { }
ngOnInit() {
this.sharedService.sharedFunction();
}
}
composant2:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class SharedService {
constructor() { }
sharedFunction(){
console.log('here');
}
}
ne pouvons-nous pas partager la fonction sans utiliser le service ??
Peut être fait en utilisant un service. À des fins d'illustration, appelons-le HeaderAndSidebarService:
Nom de fichier: header-and-sidebar.service.ts
import { Component, OnInit, Input,ViewChild } from '@angular/core';
import { HeaderAndSideBarService } from "./header-and-sidebar.service";
@Component({
...,
providers: [HeaderAndSideBarService]
})
export class HeaderComponent {
constructor(private service: HeaderAndSideBarService ) { }
ngOnInit() {
this.service.testFunction();
}
}
Pour utiliser le service, fournissez-le à la fois dans l'en-tête et le composant de la barre latérale :
@import { Injectable } from "@angular/core";
@Injectable()
export class HeaderAndSideBarService {
public testFunction() {
console.log('value');
}
}
ne pouvons-nous pas partager la fonction sans utiliser le service ??
@gihankumara Il existe un autre moyen possible, de définir une fonction comme une fonction utilitaire qui n'est pas membre d'une classe: export function testFunction () {...}