Я изменил шаблон компонента html, но изменения не были отражены в моем приложении. Есть ли способ заставить приложение обновить все его компоненты и шаблоны?angular2 обновить компонентный шаблон
Осмотревшись большинство людей говорят, чтобы использовать
ApplicationRef.tick()
- аналогично Угловое 1-х $rootScope.$digest()
- то есть, проверить полное дерево компонентов
NgZone.run(callback)
- похожий на $rootScope.$apply(callback)
- то есть, оценить функцию обратного вызова внутри Угловая зона 2. Я думаю, но я не уверен, что это завершает проверку полного дерева компонентов после выполнения функции обратного вызова.
ChangeDetectorRef.detectChanges()
- аналогично $scope.$digest()
- то есть, проверить только этот компонент и его потомков
Но все они, кажется, если вы измените переменную и необходимо обновить компонент. Все, что я сделал, это изменение некоторого html и желание повторно отобразить измененный html, но он, похоже, кэшируется.
Я попробовал ChangeDetectorRef
как следует, но это, похоже, не делать ничего:
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));
}
}
Или есть папка файлов можно просто удалить, чтобы принудительно обновить?
Как вы делаете изменения в шаблоне. Вы не можете изменить шаблон созданного компонента. Возможно, вы сможете создать новый экземпляр компонента динамически, используя новый шаблон. –
это всего лишь html-файл, поэтому я только что отредактировал его, поскольку я следую инструкциям в [tutorial] (https://angular.io/docs/ts/latest/tutorial/toh-pt5.html) - он никогда не говорит что-нибудь о кешировании и о том, как обновить шаблон, чтобы показать изменения! Компонент должен быть инстанцирован, так как я могу перейти к URL-адресу и увидеть, что старый шаблон обслуживается – Pete
Угловая компиляция шаблона при создании нового компонента и использует только скомпилированный вывод, и все равно, что вы делаете с исходным шаблоном позже. ИМХО этот подход совсем не подходит для Angular2. Я предлагаю вам работать с учебниками на http://angular.io, прежде чем пытаться применить подходы, с которыми вы привыкли, от Angular1. Угловые2 и Angular1 не имеют много общего. –