问题标签 [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 投票
2 回答
928 浏览

rx-java2 - 具有不同元素的 ReplaySubject

我想用 RxJava 实现一个 EventBus,我需要粘性事件。我知道我可以使用 BehaviorSubject,但它只缓存最后一个发出的项目,而我想缓存所有按其类型(类名)不同的事件。还有另一种选择 - ReplaySubject 但是它有一个开销 - 它包含所有发出的元素。有没有办法创建某种类型的 ReplaySubject 只包含唯一的类型元素?

0 投票
1 回答
1692 浏览

angular - 在 BehaviorSubject 流上循环

我的线程变量包含 3 个不同的元素。我想创建一个迭代这三个对象的 For 循环。

这是我的功能:

此功能只工作一次。在她的第一次通话中,她正在迭代 3 个元素。然后它只在最后一个元素上迭代。

0 投票
1 回答
1144 浏览

angular - Angular:当多个订阅(BehaviorSubjects)都被定义时调用方法

我设置了一个“全局”服务,在我的 Angular 应用程序中跨组件共享参数:

需要这些参数中的一个或两个的组件可以订阅,并在这些更改时得到通知:

param1并由异步param2初始化AppComponent,因此订阅这两个参数的组件将以任意顺序“通知”(接收值)。getDataFromAPI每当任一参数更改时都应该获取新数据,因此两个订阅都调用该方法,但另一个参数可能仍然是undefined.

显然,这可以通过简单地在调用之前检查是否定义了其他参数来轻松解决getDataFromAPI,但我想知道处理这种(当然很常见)场景的最佳方法是什么?我应该使用 promises 还是 await 来确保getDataFromAPI仅在定义了两个(所有)参数时才调用它?

想到的一个简单想法是确保ParameterService仅包含单个参数;即包装param1param2在一些“状态类”中:

这样ParameterService就变成了,

0 投票
1 回答
1031 浏览

angular - 如何从 AngularFire2 中的 BehaviorSubject 获取当前值?

我正在使用 AngularFireDatabase 来获取我的数据库的一部分,像这样可以改变的db.object('/accounts/'+this.cid);地方。我会以错误的方式解决这个问题吗?this.cidBehaviorSubject

基本上,每当我运行时,this.cid.next('fhEj2jd')我都希望它更改我们试图在 Firebase 中引用的对象。

0 投票
0 回答
268 浏览

angular - 在 app.component 构造函数中订阅 BeahviorSubject 仅在首次应用加载时触发

在 Ionic 3 项目中使用 Angular2:

我需要根据用户订阅计划更改我的 app.component 中的菜单。为了在登录后执行此操作,我有一个 BehaviorSubject 的 currentUser$ asObservable。这是我的代码设置:

app.component.ts -> 构造函数:

loginPage.ts - >登录:

authProvider -> 构造函数:

authProvider -> 登录:

登录代理用户后,我希望页面更改为带有代理菜单的 MainTabsPage(_isAgency 用于 *ngIf 以显示其他菜单项)。发生的事情是登录后页面保持登录状态,并且在 app.component 构造函数中未触发订阅。

0 投票
1 回答
5139 浏览

angular - 使用 rxjs BehaviorSubject 加载微调器

我为我的Angular 4应用程序创建了一个加载微调器组件,该组件应在 AJAX 调用期间显示,但我无法通过订阅BehaviorSubject来显示它。

这个问题与如何显示微调器有关,直到时间数据从 angular2 中的服务器收到但不是重复的(因为我想使用可重用的组件)和Angular 2 + RxJS BehaviorSubject 订阅调用不起作用(虽然我不'看不出我的代码和接受的答案有什么区别。我错过了什么吗?)

我基本上遵循了本教程https://hassantariqblog.wordpress.com/2017/03/22/angular2-using-custom-loader-spinner-as-service-in-angular-2-application/

这是我的一些代码:

app.modules.ts

app.component.html

loader.component.html

loader.component.ts

loader.service.ts

某些服务中执行 AJAX 调用的方法

问题是加载程序永远不会显示,因为isLoading永远不会设置为true. 控制台输出:

因此,在初始化组件时,更改 loader.component.ts 中值的 loaderService 订阅isLoading只会被调用一次。但据我了解BehaviorSubject应该如何工作,它应该被调用,每当LoaderService.status改变。为什么不?我究竟做错了什么?

0 投票
1 回答
681 浏览

angular - 如何使用 Observables 进行组件间通信

我正在使用来自 Rxjs 的 Observables 和 Subjects 在两个组件之间进行通信,这是服务部分:

我正在从另一个组件的构造函数中调用订阅者,其片段是:

但是当我从后端接收数据时,我会调用主题的下一个方法,并在另一个组件的构造函数中再次调用它。它不起作用,而我已经看到它起作用的例子。该服务已在全球范围内注入。

0 投票
2 回答
32244 浏览

angular - 如何为对象创建行为主体并在另一个组件上订阅它?

我在服务类中创建了一个行为主题。

在导入此服务的组件上,我订阅了此行为主题,如下所示:

但我无法在行为主题中获得准确的数据集。

编辑 我忘了提到我使用 ViewContainerRef 创建了我的兄弟组件,我将其添加到带有一些评论的答案中。

0 投票
1 回答
5490 浏览

angular - RXJS 获取 ReplaySubject 的当前值

我试图在登录时从回复主题中提取当前值。在当前流中订阅时,返回前一个值而不是当前值。所以收到的东西是登录时以前的东西,而不是当前的东西。有没有办法在 ReplaySubject 中获取订阅时 observable 的当前值,而不必求助于 BehaviorSubject?

东西.service.ts:

stuff.component.ts:

0 投票
1 回答
88 浏览

android - 如何知道 observable emit 是否是缓存的 BehaviourSubject 值?

我使用 BehaviourRelay 作为源 observable,我喜欢它会在订阅时发出最后一个缓存的值,所以我不需要手动调用 showPlayingState(mPlayStateManager.getCurrentState())。

然而,当我想对订阅中的动画做出反应时,这会带来一个问题,因为我不想在这个缓存的发射上运行动画,当我订阅 onCreate 时会发射,UI 应该只是跳转到不对其进行动画处理的状态。动画应该只在“新”发射的情况下运行

这至少对我来说是一个相当常见的用例,但我在 rx 中很难弄清楚