Ich arbeite mit Angular2 und möchte, dass ein Element bedingt auf dem Ergebnis eines Funktionsaufrufs angezeigt wird.Angular2 * ngIf = "afunctioncall()" führt dazu, dass die Funktion 9 mal aufgerufen wird
Wenn ich dies tue, habe ich bemerkt, dass die Funktion mehrmals aufgerufen wird.
@Component({
selector: 'my-app',
template: `
<h1>Hello</h1>
<div *ngIf="returnsTrue()">
<h1>World</h1>
</div>
`,
})
export class App {
name:string;
constructor() {
this.name = 'Angular2'
}
returnsTrue(): boolean {
console.log('Returning true');
return true;
}
}
Siehe assoziiert plnkr:
http://plnkr.co/edit/MScwD3LaIj9YfBlwWltw?p=preview
Der 'Return true' console.log Ausgang ist 4-mal.
Kann jemand mich darauf hinweisen, warum dies auftritt?
Und gibt es es sowieso, um es zu vermeiden?
Ich habe den folgenden Beitrag jedoch damit zu Angular 1 und der Digest-Zyklus für Angular2 neu geschrieben wird ich es relevant ist nicht sicher bin, im Zusammenhang gesehen werden:
ng-if being called more times than it should
Diese Antwort funktionierte für mich, nachdem ich die Funktion (this.returnsTrue(); im Anser) Aufruf an ngOnChanges() verschoben. Wenn Sie es in ngOnInit() belassen, wurde die Funktion nur einmal und nicht nur einmal pro Komponentenaktualisierung aufgerufen. – wdspider