Ich habe meine Komponente Vorlage HTML geändert, aber die Änderungen wurden nicht in meiner App widergespiegelt. Gibt es eine Möglichkeit, die App zu zwingen, alle ihre Komponenten und Vorlagen zu aktualisieren?angular2 aktualisieren Komponente Vorlage
Nachdem sah sich die meisten Menschen
ApplicationRef.tick()
verwenden sagen - zu Angular ähnlich 1en $rootScope.$digest()
- dh überprüfen Sie die vollständige Komponentenbaum
NgZone.run(callback)
- ähnlich wie $rootScope.$apply(callback)
- dh bewerten innerhalb der Callback-Funktion die Angular 2-Zone. Ich denke, aber ich bin mir nicht sicher, dass das den gesamten Komponentenbaum nach dem Ausführen der Callback-Funktion überprüft.
ChangeDetectorRef.detectChanges()
- ähnlich wie $scope.$digest()
- das heißt, überprüfen Sie diese Komponente nur und seine Kinder
Aber sie alle zu sein scheinen, wenn Sie eine Variable ändern und die Komponente aktualisieren müssen. Alles, was ich getan habe, ist etwas HTML zu ändern und den geänderten HTML-Code neu zu rendern, aber es scheint im Cache gespeichert zu sein.
habe ich versucht, die ChangeDetectorRef
wie folgt, aber es scheint nichts zu tun:
import { Component, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
import { Router } from '@angular/router';
import { Hero } from '../classes/hero';
import { HeroService } from '../services/hero.service';
@Component({
selector: 'my-dashboard',
templateUrl: '/app/templates/dashboard.component.template.html', // I just want to refresh some changes I made in this file
changeDetection: ChangeDetectionStrategy.OnPush // I have tried with and without this - doesn't seem to do anything for me
})
export class DashboardComponent implements OnInit {
heroes: Hero[] = [];
constructor(
private ref: ChangeDetectorRef,
private router: Router,
private heroService: HeroService
) {
this.ref.markForCheck(); // make it check for changes
}
public ngOnInit(): void {
this.getHeroes();
}
public gotoDetail(hero: Hero): void {
let link = ['/detail', hero.id];
this.router.navigate(link);
}
private getHeroes(): void {
console.log('sdklfn;')
this.heroService.getHeroes()
.then(heroes => this.heroes = heroes.slice(1, 5));
}
}
Oder gibt es einen Ordner von Dateien kann ich nur eine Aktualisierung erzwingen löschen zu?
Wie hast du das machen Änderungen an der Vorlage Sie können die Vorlage einer instanziierten Komponente nicht ändern. Sie können möglicherweise dynamisch eine neue Komponenteninstanz erstellen, die die neue Vorlage verwendet. –
es ist nur eine HTML-Datei, also habe ich es gerade bearbeitet, während ich die Anweisungen in [Tutorial] (https://angular.io/docs/ts/latest/tutorial/toh-pt5.html) befolge - es sagt nie alles über das Caching und wie man die Vorlage aktualisiert, um die Änderungen anzuzeigen! Die Komponente sollte instanziiert werden, da ich zur URL blättern kann und die alte Vorlage sehen kann. – Pete
Angular kompiliert die Vorlage, wenn sie eine neue Komponente erstellt und nur die kompilierte Ausgabe verwendet und es überhaupt nicht interessiert, was Sie mit der ursprünglichen Vorlage machen später. IMHO passt dieser Ansatz überhaupt nicht zu Angular2. Ich würde vorschlagen, dass Sie die Tutorials unter http://angular.io durcharbeiten, bevor Sie versuchen, Ansätze anzuwenden, die Sie von Angular1 gewohnt sind. Angular2 und Angular1 haben nicht viel gemeinsam. –