【问题标题】:Cannot combine Observable Array to empty Observable array in my angular4 code无法在我的 angular4 代码中将 Observable Array 组合为空 Observable 数组
【发布时间】:2018-04-13 14:04:27
【问题描述】:

我使用 angular 4 和 angularfire2 编写了一个组件,但我得到一个错误的回报,说 “ERROR TypeError: _this.memberEvents$.combineLatest is not a function”

请参考以下代码并指出纠正方法。

    import { Observable } from 'rxjs/Observable';
    import { MemberService } from './../../member.service';
    import { ClubService } from './../../club.service';
    import { ActivatedRoute } from '@angular/router';
    import { EventService } from './../../event.service';
    import { Component, OnInit, OnChanges, OnDestroy } from '@angular/core';
    import { select } from 'ng2-redux';
    import 'rxjs/add/operator/take';
    import 'rxjs/add/operator/map';
    import 'rxjs/add/operator/mergeMap';
    import 'rxjs/add/observable/empty' 
    import 'rxjs/add/operator/takeUntil';
    import 'rxjs/add/observable/combineLatest';
    import 'rxjs/add/observable/of';
    import { Subject } from 'rxjs';

    @Component({
      selector: 'member-favorite',
      templateUrl: './member-favorite.component.html',
      styleUrls: ['./member-favorite.component.css']
    })
    export class MemberFavoriteComponent implements OnInit, OnDestroy {
      userId;
      favoriteEvents$;
      memberEvents$ = Observable.of([]);
      id;
      private ngClubsUnsubscribe$ = new Subject();

      constructor(private route: ActivatedRoute,
        private eventService: EventService, 
        private clubService: ClubService,
        private memberService: MemberService) {
        this.userId = localStorage.getItem('userId');
        this.id = this.route.snapshot.paramMap.get('id');

      }

      ngOnInit() {
        this.getMemberEvents();
      }

      ngOnDestroy() {
        this.ngClubsUnsubscribe$.next();
        this.ngClubsUnsubscribe$.complete();
      }

      getMemberEvents() {
        this.clubService.getActiveClubs().takeUntil(this.ngClubsUnsubscribe$)
          .subscribe(clubs => {
            clubs.map(c => {
              this.memberService.isMember(c.id, this.userId)
              .take(1)
              .subscribe(res => {
                if(res && res === true) {
                  console.log("user is a member of club ", c.clubname);

                  let clubEvents = this.eventService.getForthCommingEventsOfClub(c.id);
                  this.memberEvents$.combineLatest(clubEvents); 

如何更正这条线。 有没有其他方法可以做到这一点。

                }
              });
            });
          });
      }

    }

【问题讨论】:

    标签: angular rxjs angularfire2


    【解决方案1】:

    您直接从Observable 调用 combineLatest。

    例如:Observable.combineLatest(..., ...)

    如果您想添加另一个流,根据您的示例,您可以使用withLatestFrom 运算符:

    this.memberEvents$.withLatestFrom(clubEvents); 
    

    【讨论】:

    • 编译器错误消失,但没有获取结果。
    • 与您提出的更改相同的代码。 this.memberEvents$.withLatestFrom(clubEvents);我也导入了“withLatestForm”运算符。
    • 我没有看到subscribe。 Observable 在订阅存在之前不会激活。 this.memberEvents$.withLatestFrom(clubEvents).subscribe(() => { do stuff });
    • 我在 html 中订阅它,使用 |异步的。问题是我没有得到任何记录。
    • 发射必须合并到一个数组中才能在视图中使用。您正在加入两个源流,而不是数据本身。这将加入数据:this.events = this.memberEvents$.withLatestFrom(clubEvents).pipe(map(data => // you need to flatten the data here ))
    猜你喜欢
    • 2014-10-24
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2017-07-30
    相关资源
    最近更新 更多