Angular 4:观察控制器变量

布拉伯塔瑟19

假设我有一个旧代码,我不想更改它。我有三个服务器调用来获取一些数据,并且在这三种方法都成功之后我必须运行一些代码。我添加了变量,我想听听它的变化(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(){}

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

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

Mark Pieszak - Trilon.io

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

我们也保存了对它的引用,以便我们也可以取消订阅 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);
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Angular.js:在控制器之间共享可观察的数据

从Angular2中的控制器中的模板访问局部变量

如何将范围内的变量注入Angular控制器?

如何在angular中将输入变量检索到javascript控制器上?

Angular-使用控制器变量设置指令属性时出错:$ rootScope:infdig

在Angular 4上,控制器是否在浏览器或服务器上执行?

从Angular指令向Angular控制器中注入变量

无法从Angular JS的控制器函数中访问$ scope变量

在更新Angular工厂变量时更新控制器变量

使用Karma和Jasmine在Angular JS中测试父控制器范围的变量

Angular控制器中的函数未将数据返回到$ scope变量

控制器Angular的演出

Angular:在控制器中渲染包含范围变量的外部化字符串

Angular + Typescript:在控制器类中使用指令类作用域变量

Angular控制器继承变量而没有$ scope

在没有ngOptions的指令中设置angular.js控制器变量

在angular.js中的指令中从控制器访问范围变量

在SF2控制器中恢复Angular JS变量

Angular-服务$ http调用后设置控制器变量

如何将变量从Angular控制器传递到html <script> </ script>?

控制器无法访问Angular Service变量

Angular $ watch不适用于通过指令更新的控制器变量

为什么打字稿使用angular编译掉我的基本控制器的局部变量?

Angular-将变量公开给控制器

如何从$ http.get检索的数组中填充Angular控制器变量

Angular 1组件绑定不评估父控制器变量

如何将模板定义的变量传递给 Angular 控制器

防止 Angular 4 破坏视图/控制器

将数组变量从控制器传递给 Angular 中的 html