Когда вы посмотрите на учебник по маршрутизации AngularDart Heroes, вы заметите, что у hero_component.html
есть элемент проверки *ngIf
null вокруг его содержимого.Это необходимо, потому что HeroComponent
получает свои id
из параметров текущего RouterState
, и для получения доступа к RouterState
необходимо реализовать хук onActivate
.
@override
void onActivate(_, RouterState current) async {
final id = getId(current.parameters);
if (id != null) hero = await (_heroService.get(id));
}
Хук onActivate
вызывается после визуализации HTML, поэтому hero
может быть нулевым.
<div *ngIf="hero != null">
<h2>{{hero.name}}</h2>
<div>
<label>id: </label>{{hero.id}}</div>
<div>
<label>name: </label>
<input [(ngModel)]="hero.name" placeholder="name" />
</div>
<button (click)="goBack()">Back</button>
</div>
Для меня это выглядит очень уродливым фрагментом кодапотому что вы должны ввести новый DOM-узел просто для проверки свойства null.Есть ли какое-либо иное решение этой проблемы, например, отложить начальную визуализацию страницы или вызвать onActivate
до ngOnInit
?