La méthode a est-elle appelée multiple dans * ngIf qui est à l'intérieur d'un * ngFor J'ai un exemple de code ci-dessous.
HTML Code
<div *ngFor="let item of groups">
<div class="headerBar" *ngIf="showHeader(item)">
<h3>Hello to the Board</h3>
</div>
</div>
//Typescript Code
showHeader(item){
let show = true;
if(item.group === 'invalid' || item.group === 'unkown' || item.group === 'invisible'){
show = false;
}
return show;
}
La méthode showHeader est-elle appelée plusieurs fois, dans le HTML comme dans * ngFor? Sinon, comment puis-je appeler la méthode plusieurs fois pour fournir la valeur de ma condition * ngIf.
4 Réponses :
Oui, ce sera le cas.
En passant, vous voudrez peut-être examiner l'utilisation de ng-container: https://angular.io/guide/structural-directives#ng-container
<div *ngFor="let item of groups">
<ng-container *ngIf="item.group === 'invalid' || item.group === 'unkown' || item.group === 'invisible'">
<h3>Hello to the Board</h3>
</ng-container>
</div>
Pourquoi remplacer div par ng-container ? Il y a même une classe attachée au div dans la question.
À ma connaissance, car cela empêche spécifiquement cet élément d'être placé dans le DOM, lorsque la condition n'est pas remplie.
Oui, mais dans ce cas, OP a besoin d'un div supplémentaire dans le DOM étant donné qu'une classe lui est appliquée.
C'est un comportement normal. Si vous ne contrôlez pas la stratégie de détection de changement, la fonction sera exécutée pour chaque cycle de détection de changement. Il est toujours préférable de ne pas utiliser de fonctions dans les interpolations et les liaisons de propriétés.
À la place, vous pouvez évaluer la condition dans le contrôleur, affecter la sortie à une variable et l'utiliser dans le modèle.
Contrôleur p >
<div *ngFor="let item of groups">
<div class="headerBar" *ngIf="item?.show">
<h3>Hello to the Board</h3>
</div>
</div>
Modèle
ngOnInit() {
this.groups.forEach(group => {
if(group.group === 'invalid' || group.group === 'unkown' || group.group === 'invisible'){
group.show = false;
} else {
group.show = true;
}
});
}
J'ai utilisé ngOnInit à titre d'illustration. Vous pouvez vérifier où la variable groups est réellement initialisée.
Utilisez cette approche si vous souhaitez que cette condition soit vérifiée dans plusieurs composants / emplacements en utilisant Pipes
<div *ngFor="let item of groups"> <div class="headerBar" *ngIf="item | checkGroup"> <h3>Hello to the Board</h3> </div> </div>
@Pipe({
name: 'checkGroup',
})
export class CheckGroupPipe implements PipeTransform {
transform(inputText: any): any {
if(item.group === 'invalid' || item.group === 'unkown' || item.group === 'invisible'){
return false;
}
return true;
}
}
Vous pouvez vérifier Documentation angulaire pour en savoir plus sur les tuyaux purs / impurs
ce que vous avez écrit me va bien. Vous pourriez simplifier votre méthode de cette façon, mais c'est la même logique.
showHeader(item){
return (item.group !== 'invalid' && item.group !== 'unkown' && item.group !== 'invisible');
}
Il est préférable d'utiliser des tuyaux plutôt que des appels de fonction dans le modèle angulaire, donc je vote pour la réponse ci-dessous
je ne sais pas quelle est la question. ce que vous avez écrit devrait fonctionner correctement.