0

我尝试在 Angular 2 中过滤 BehaviorSubject。服务中的佣金对象将通过 http 请求获取数据。但是因为它是用“null”实例化的,所以过滤器代码行有一个错误。

错误:

无法读取 null 的属性“0”

.filter((commission: Commission[], index) => commission[index]._id === this.commissionid)

这是代码:

佣金服务:

public commissions: Subject<Commission[]> = new BehaviorSubject<Commission[]>(null);

在组件中:

  ngOnInit() {
    this.commissionService.commissions
        .filter((commission: Commission[], index) => commission[index]._id === this.commissionid)
        .subscribe(data => {console.log(data); })
  }

如果我更改 this.commissionid,这个过滤器是否可能会起作用?谢谢!

4

2 回答 2

3

您想从主题中获得一个对象,因此请使用 rxjsfirst运算符。http://reactivex.io/documentation/operators/first.html

init_obj(id) {
    this.commissionService.commissions
        .first(c => c._id === id)
        .subscribe(data => {
            this.commission = data;
        })
}
于 2017-07-06T07:28:37.287 回答
0

现在我找到了一个解决方案,感谢您的帮助,这里是完整的代码:

  ngOnInit() {
    this.route.params.subscribe((params: Params) => {
      this.commissionid = params.commissionid;
      if (this.commissionid) { this.init_obj(this.commissionid); }
    });

  }


  init_obj(id) {
    this.commissionService.commissions
        .map(function(data) {
          if (data) { return data.find(commission => commission._id === id); }
        })
        .subscribe(data => {
          if (data) { this.commission = data; }
        })

  }
于 2017-07-06T07:56:07.020 回答