Angular 4:监视控制器变量

时间:2017-07-12 14:04:56

标签: angular typescript rxjs

假设我有一个旧代码,我不想改变。我有三个服务器调用,以获取一些数据,并且我必须在所有这三种方法成功后运行一些代码。我添加了变量,我想听听它的变化(ngOnChanges不起作用)。

这是代码:

ngOnInit() {
  this.loadedReq = 0; // When this var is 3 - then all requests passed, and i have to run some custom code, how to watch on this variable?

  this.getCars();
  this.getModels();
  this.getTypes();
}

getCars() {
  return this.myService.getCars(this.clientId)
    .subscribe((response) => {
      this.loadedReq++;
    });
}

getModels() {
  return this.myService.getModels(this.clientId)
    .subscribe((response) => {
      this.loadedReq++;
    });
}

getTypes() {
  return this.myService.getTypes(this.clientId)
    .subscribe((response) => {
      this.loadedReq++;
    });
}

someMethodWhenAllLoaded(){}

有可能吗?不改变方法(我的意思是在响应上实现巨大的RxJ逻辑)?

如果没有,那么如何在这里创建一个解决方法?

1 个答案:

答案 0 :(得分:0)

有很多不同的方法可以做,但你可以做的一件事是使用RxJs的.zip()运算符等到它们全部完成。

我们也保存对它的引用,以便我们也可以取消订阅onDestroy。

zippedSubs$: Subscription;

  ngOnInit() {
    this.zippedSubs$ = Observable.zip([
      this.getCars(),
      this.getModels(),
      this.getTypes()
    ]).subscribe(result => {
      console.log('All 3 are done!');
    });
  }

  ngOnDestroy() {
    this.zippedSubs$.unsubscribe();
  }

  getCars() {
    return this.myService.getCars(this.clientId);
  }

  getModels() {
    return this.myService.getModels(this.clientId);
  }

  getTypes() {
    return this.myService.getTypes(this.clientId);
  }