问题标签 [behaviorsubject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
87 浏览

angular - Angular2:仅在多模块化 angular2 应用程序的根模块中添加观察者不起作用

在我的项目中,我有多个模块,并且我创建了一个在实用程序模块中可用的共享服务。服务如下:

该应用程序的地图如下: 应用流程

实用程序模块如下:实用模块

在 Home 模块的根组件中放置以下代码:-

在组件的 ts 文件中完成以下代码:

在 Html 文件中,代码如下:

当在只有一个根模块的单模块应用程序中实现时,上述事情工作正常,但在这个多模块应用程序中,事情不起作用。

现在其他模块中的组件将根据需要加载到该组件中。

在当前应用程序中,如果我在每个子模块的根组件中添加可观察代码,但这将需要在每个子模块中添加 html 拦截器。

所以我需要一个解决方案,它可以帮助我在实用程序模块中只有一个 HTML 拦截器,而在应用程序的根模块中只需要一个 observable

0 投票
1 回答
13786 浏览

rxjs - 如何组合多个 rxjs BehaviourSubjects

我正在构建一个 Angular2 应用程序,并且有两个BehaviourSubjects我想在逻辑上组合成一个订阅。我正在发出两个 http 请求,并希望在它们都回来时触发一个事件。我在看forkJoinvs combineLatest。似乎 combineLatest 会在任何一个 behvaviorSubjects 更新时触发,而 forkJoin 只会在所有 behavoirSubjects 都更新后触发。这个对吗?必须有一个普遍接受的模式,不是吗?

编辑
这是我的 angular2 组件订阅的一个behaviorSubjects 示例:

这是我的组件订阅的片段:

但是,我不想在单个订阅上触发 doSomeWork(),而是只想在 cpmSubject 和 fooSubject 触发时触发 doSomeWork()。

0 投票
1 回答
3186 浏览

angular - 将数组中的值附加到 BehaviorSubject

我有一个 EvaluateHistoryItem[] 类型的 BehaviourSubject history$。在uploadFile 方法中,我用逗号分割上传的.txt 文件,然后将它们推送到resultSet[]。我想将 resultSet[] 中的值附加到 history$ BehaviorSubject。

我是 RxJS 的新手,发现它很复杂(仍在努力)。我会很感激一些帮助。


我尝试了这样的事情,但它不正确,因为我不想映射,而是附加新值(我认为它应该是 combineLatest 的东西):

附言。对不起,如果问题的标题不好。


这是我的代码:

0 投票
1 回答
379 浏览

angular - 如何等待执行,直到观察者完成 BehaviourSubject // Angular 2 RxJS

我的代码有一个 BehaviorSubject,整个应用程序中有许多观察者。在 BehaviorSubject 上创建 .next() 时,我怎么知道所有注册的观察者何时都完成了执行。

0 投票
1 回答
954 浏览

javascript - Angular 2 - 使用 BehaviorSubject 创建循环的服务

我有一个嵌套组件,其中包含一个可单击的图表,其中包含三个可选部分,这些部分将设置它所在的 md-tab-group 的 selectedIndex。我单击第一个,转到第一个选项卡,第二个指向第二个,第三个选项卡,非常简单。

问题是我正在使用的服务似乎正在创建某种循环。当我安慰服务正在采取的步骤时,我发现它每次都在变大。

相关服务代码:

当我单击第一部分时看到的内容,导航回带有主导航的图表,然后再重复该过程两次:

我对 BehaviorSubject 很陌生,对我哪里出错有任何想法吗?

(我使用的示例来自这里,如果有帮助的话)

父组件的相关代码:

子组件的相关图表 TS:

0 投票
8 回答
196385 浏览

angular - 主题和行为主题有什么区别?

我不清楚 aSubject和 a之间的区别BehaviorSubject。只是 aBehaviorSubject有这个getValue()功能吗?

0 投票
1 回答
3739 浏览

angular - Angular:使用 RxJs/BehaviorSubject 在组件之间动态共享数据

我有两个同级组件并并排显示,比如说 Component-A 和 Component-B。

Component-A 有表单控件,一旦用户填写表单,我需要执行一些业务逻辑并将数据显示到 Component-B。

我创建了服务来共享数据。当前数据在用户进行任何更改时可用 Component-B 但它不会自动显示,我在 Component-B 上放置了“刷新”按钮,当我单击按钮时数据会显示出来。

我想要实现的是从 Component-A 到 Component-B 的流畅数据流,无需任何用户点击。由于某种原因,我无法订阅 Component-B 中的服务。

使用 @angular 版本 ~4.0.0

导航服务.ts

组分-A

HTML:

组分-B

HTML

在下面的 html 中,当用户在 ComponentA 中进行更改时,我想在 {{dataFromComponentA}} 中自动显示数据。当前,当我单击“刷新”按钮时,正在显示数据,我想避免单击此按钮。

0 投票
2 回答
664 浏览

angular - 如果我在打字稿中调用 Array.find() ,订阅函数不会调用

我对 Typescript 和 Web 开发真的很陌生。当我订阅一个事件并且找不到解决方案时,我发现了一件奇怪的事情。我有一个包含 a 的BehaviorSubject服务carId。我有一个页面,其中有一个 id 列表,如果我点击一个 id,它会调用setCarId. 到目前为止,一切正常。

这是服务:

我还有另一项服务,我订阅carId. 在这个我有一个汽车对象,我想从我的汽车数组中获取那辆车,我的BehaviorSubject. 我用我的代码中的方法得到了我需要的汽车,array.find它工作正常,但不是订阅。我不知道为什么,但是使用这一行this.car = this.cars.find(car => car.carId == carId)不会调用 subscribe 方法,但没有那行它可以正常工作。

我不知道为什么会发生这种情况以及如何解决它,所以请帮助我。

0 投票
0 回答
287 浏览

angular - 如何使用 Observable 从路由器插座内部组件动态更改类?

出于学习目的,我有一个场景并尝试使用能够动态更改路由器插座生成的组件类的服务。

之后,我拥有带有 BehaviorSubject 的服务,该服务的值由函数切换。

我需要下一步的帮助。我确实从子组件订阅,并在构造函数中获取值并将其存储在本地(组件的)变量中。(也许是错的)

如果我将它(localStateRouterOutlet)声明为有任何意义@Input()吗?

从服务管理切换功能的线索在哪里对这个变量有影响?

如果我绑定

它应该为我的最初目的工作吗?这是完全错误的概念吗?

我非常感谢您提前提供帮助。

0 投票
1 回答
561 浏览

angular - 使用 BehaviorSubject 和异步未显示微调器

我有以下服务来适应我的应用程序中的全局微调器:

然后router-outlet在我的主要应用程序组件中,以下内容就在我的上方:

<app-spinner *ngIf="spinnerService.getSpinnerVisibility() | async"></app-spinner>

spinnerService.showSpinner()实际上并没有触发它显示;知道为什么吗?我已经SpinnerServiceproviders我的AppModule.

这是微调器组件:

<div class="backdrop"><div class="spinner"></div></div>

绝对没有别的!当我删除*ngIf上面的语句时,顺便说一句,它显示正确,这意味着 CSS 没有任何问题。