[英]how to assign an array to an Observable type interface in angular
[英]Assign an observable to an array in angular 4
我试图从一个observable初始化一个数组。 但是我收到编译错误说:
零件:
export class LeaderBoardComponent implements OnInit {
leaderBoardTableData: Array<LeaderBoardModel>;
constructor(private appStore: Store<AppStore>,
private leaderBoardService: LeaderBoardService) {
this.leaderBoardService.getLeaderBoard()
.skipWhile((data) => { return _.isEmpty(data) })
.subscribe((data) => {
if (!_.isEmpty(data)) {
this.leaderBoardTableData = this.leaderBoardService.getLeaderBoard();
}
});
}
服务:
getLeaderBoard(): Observable<LeaderBoardModel> {
return this.httpUtil.get(this.appConstants.END_POINT_LEADERBOARD)
.map(response => <LeaderBoardModel>response.json());
}
getLeaderBoard()
方法返回单个LeaderBoardModel
元素的observable。 因此,在订阅时,您必须将订阅的值(即data
)推leaderBoardTableData
组件中的leaderBoardTableData
。
我认为它应该是:
.subscribe((data) => {
if (!_.isEmpty(data)) {
this.leaderBoardTableData = [data];
// or `this.leaderBoardTableData.push(data);` , you have to make sure that `leaderBoardTableData` is already instantiated though
}
});
您必须订阅this.leaderBoardService.getLeaderBoard()
因为您无法将Observable分配给数组。
所以在你的代码中这样做:
this.leaderBoardService.getLeaderBoard().subscribe(data => {
this.leaderBoardTableData = data;
});
如果您希望leaderBoardTableData
等于一个observable,以便您的代码不必更改,您只需更改类型定义:
leaderBoardTableData: Array<LeaderBoardModel>;
至:
leaderBoardTableData: Observable<LeaderBoardModel>;
还要认识到你有一个通用的Array
类型,这意味着你的observable的返回值也必须是通用的Array
类型,否则你将从编译器中得到类似的类型检查错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.