Может ли кто-нибудь помочь увидеть, есть ли синтаксическая ошибка здесь, в моем шаблоне? Он не дает ошибок, но не заполняет данные в шаблоне.angular2 async pipe не заполняет данные объекта в шаблон
<div *ngIf="(hero | async)">
<h2>{{hero}}</h2>
<h2>{{hero.name}} details!</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>
Компонентный код
export class HeroDetailComponent implements OnInit {
errorMessage: string;
//@Input()
hero: Observable<Hero>;
constructor(
private _heroService: HeroService,
private _routeParams: RouteParams) {
}
ngOnInit() {
let _id = +this._routeParams.get('_id');
this._heroService.loadHero(_id);
this.hero = this._heroService.hero$;
this.hero.subscribe(data =>
console.log(data)
)
}
В console.log (данные) печатает объект {_id: 11, имя: "Г-н Nice"} , который мне, что данные корректно получены.
Также отображается блок <div>
, что означает * ngIf видит объект как не пустой.
<h2>{{hero}}</h2>
показывает [объект объекта].
Но почему {{hero.name}} не отображается?
У вас есть несколько вещей, перепутали. 'hero' - это свойство ввода, но тогда вы назначаете ему значение в ngOnInit() - это нечетно. Назначенное значение - Observable, которое не имеет свойства 'name', что объясняет, почему' {{hero.name}} 'не будет работать. Этот ответ должен помочь вам: http://stackoverflow.com/a/34561532/215945 –
Я обновил сообщение и удалил @input. Но все тот же. Асинхронная труба должна превращать наблюдаемый в объект героя? – Shawn