Неподготовлено (в обещании): Ошибка: невозможно прочитать свойство неопределенного
Компонент принимает пользователя из службы с параметрами
@Component({
selector: 'users',
providers: [UserService],
template: '
<p>{{user.id}}</p>
'
})
export class UserPageComponent implements OnInit {
constructor(
private userService: UserService,
private route: ActivatedRoute
) {};
ngOnInit(): void {
this.route.params.forEach((params: Params) => {
let id = +params['id'];
this.userService.getUser(id)
.then(user => {console.log(user.id);this.user = user})
});
}
Обслуживание:
@Injectable()
export class UserService {
private postUrl = 'http://127.0.0.1:8000/user-detail/'; // URL to web api
constructor(private http: Http) {
}
getUser(id: number): Promise<User> {
return this.http.get(this.postUrl+id)
.toPromise()
.then(response => response.json() as User)
.catch(this.handleError);
};
И я получаю сообщение об ошибке Uncaught (in promise): Error: Error in./UserPageComponent class UserPageComponent - inline template:1:7 caused by: Cannot read property 'id' of undefined
Похоже, что служба не отправляет обещание, хотя и должно. Как решить эту проблему?
Ответы
Ответ 1
Похоже, что ваш компонент не имеет значения по умолчанию для пользователя, поэтому он не определен, когда компонент рендеринга пытается добавить значение по умолчанию
@Component({
selector: 'users',
providers: [UserService],
template: '
<p>{{user.id}}</p>
'
})
export class UserPageComponent implements OnInit {
user = {} // default value for user
constructor(
private userService: UserService,
private route: ActivatedRoute
) {};
ngOnInit(): void {
this.route.params.forEach((params: Params) => {
let id = +params['id'];
this.userService.getUser(id)
.then(user => {console.log(user.id);this.user = user})
});
}
на самом деле будет лучше добавить некоторую условную логику здесь, тогда
<p *ngIf="user">{{user.id}}</p>
он должен работать