我正在尝试在 Angular中渲染一个Observable 。我正在向 API 发出请求以获取一些数据,但是当我尝试渲染它时,浏览器上什么也没有出现。
这是我用来获取有关 1 个用户的数据的服务:
export class UserService {
public _url: string = "https://url/rest/user/";
constructor(private http: HttpClient) { }
getUser(id): Observable<IUser>{
return this.http.get<IUser>(this._url + id)
.catch(this.errorHandler);
}
errorHandler(error: HttpErrorResponse){
return Observable.throw(error.message);
}
}
这是用户组件:
@Component({
selector: 'app-user',
templateUrl: './user.component.html',
providers: [ UserService ],
styleUrls: ['./user.component.css']
})
export class UserComponent implements OnInit {
public userId;
public errorMsg;
user: IUser;
constructor(private route: ActivatedRoute, private _userService:
UserService) { }
ngOnInit() {
let id = parseInt(this.route.snapshot.paramMap.get('id'));
this.userId = id;
this._userService.getUser(this.userId)
.subscribe(data => this.user = data,
error => this.errorMsg = error);
}
}
我用来呈现 de User的视图HTML是:
<div>
<h2>{{user?.firstName}} {{user?.lastName}}</h2>
<dl>
<dt>Age:</dt>
<dd>{{user?.age}}</dd>
<dt>ID:</dt>
<dd>{{user?.id}}</dd>
<dt>Email:</dt>
<dd>{{user?.email}}</dd>
</dl>
</div>
在此示例中,我没有错误,但用户字段均为空,没有显示任何内容。我试过用这个:
<div *ngIf="user | async; let user; else loading">
<ng-template #loading>Loading User Data...</ng-template>
但它不起作用,控制台显示:
Error: InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe' ...
我在另一个组件中执行相同的过程,在该组件中我使用 IUser [] 之类的用户数组,这次我使用 ngfor 显示数据并且一切正确,数据按预期显示在浏览器中.. 我我以与我在上面解释的方式相同的方式进行操作,但使用 ngif 或 user?.id 且不使用数组。