繁体   English   中英

以角度4为数组指定一个observable

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM