问题标签 [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.
rx-java2 - 具有不同元素的 ReplaySubject
我想用 RxJava 实现一个 EventBus,我需要粘性事件。我知道我可以使用 BehaviorSubject,但它只缓存最后一个发出的项目,而我想缓存所有按其类型(类名)不同的事件。还有另一种选择 - ReplaySubject 但是它有一个开销 - 它包含所有发出的元素。有没有办法创建某种类型的 ReplaySubject 只包含唯一的类型元素?
angular - 在 BehaviorSubject 流上循环
我的线程变量包含 3 个不同的元素。我想创建一个迭代这三个对象的 For 循环。
这是我的功能:
此功能只工作一次。在她的第一次通话中,她正在迭代 3 个元素。然后它只在最后一个元素上迭代。
angular - Angular:当多个订阅(BehaviorSubjects)都被定义时调用方法
我设置了一个“全局”服务,在我的 Angular 应用程序中跨组件共享参数:
需要这些参数中的一个或两个的组件可以订阅,并在这些更改时得到通知:
param1
并由异步param2
初始化AppComponent
,因此订阅这两个参数的组件将以任意顺序“通知”(接收值)。getDataFromAPI
每当任一参数更改时都应该获取新数据,因此两个订阅都调用该方法,但另一个参数可能仍然是undefined
.
显然,这可以通过简单地在调用之前检查是否定义了其他参数来轻松解决getDataFromAPI
,但我想知道处理这种(当然很常见)场景的最佳方法是什么?我应该使用 promises 还是 await 来确保getDataFromAPI
仅在定义了两个(所有)参数时才调用它?
想到的一个简单想法是确保ParameterService
仅包含单个参数;即包装param1
并param2
在一些“状态类”中:
这样ParameterService
就变成了,
angular - 如何从 AngularFire2 中的 BehaviorSubject 获取当前值?
我正在使用 AngularFireDatabase 来获取我的数据库的一部分,像这样可以改变的db.object('/accounts/'+this.cid);
地方。我会以错误的方式解决这个问题吗?this.cid
BehaviorSubject
基本上,每当我运行时,this.cid.next('fhEj2jd')
我都希望它更改我们试图在 Firebase 中引用的对象。
angular - 在 app.component 构造函数中订阅 BeahviorSubject 仅在首次应用加载时触发
在 Ionic 3 项目中使用 Angular2:
我需要根据用户订阅计划更改我的 app.component 中的菜单。为了在登录后执行此操作,我有一个 BehaviorSubject 的 currentUser$ asObservable。这是我的代码设置:
app.component.ts -> 构造函数:
loginPage.ts - >登录:
authProvider -> 构造函数:
authProvider -> 登录:
登录代理用户后,我希望页面更改为带有代理菜单的 MainTabsPage(_isAgency 用于 *ngIf 以显示其他菜单项)。发生的事情是登录后页面保持登录状态,并且在 app.component 构造函数中未触发订阅。
angular - 使用 rxjs BehaviorSubject 加载微调器
我为我的Angular 4应用程序创建了一个加载微调器组件,该组件应在 AJAX 调用期间显示,但我无法通过订阅BehaviorSubject来显示它。
这个问题与如何显示微调器有关,直到时间数据从 angular2 中的服务器收到但不是重复的(因为我想使用可重用的组件)和Angular 2 + RxJS BehaviorSubject 订阅调用不起作用(虽然我不'看不出我的代码和接受的答案有什么区别。我错过了什么吗?)
这是我的一些代码:
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
改变。为什么不?我究竟做错了什么?
angular - 如何使用 Observables 进行组件间通信
我正在使用来自 Rxjs 的 Observables 和 Subjects 在两个组件之间进行通信,这是服务部分:
但是当我从后端接收数据时,我会调用主题的下一个方法,并在另一个组件的构造函数中再次调用它。它不起作用,而我已经看到它起作用的例子。该服务已在全球范围内注入。
angular - 如何为对象创建行为主体并在另一个组件上订阅它?
我在服务类中创建了一个行为主题。
在导入此服务的组件上,我订阅了此行为主题,如下所示:
但我无法在行为主题中获得准确的数据集。
编辑 我忘了提到我使用 ViewContainerRef 创建了我的兄弟组件,我将其添加到带有一些评论的答案中。
angular - RXJS 获取 ReplaySubject 的当前值
我试图在登录时从回复主题中提取当前值。在当前流中订阅时,返回前一个值而不是当前值。所以收到的东西是登录时以前的东西,而不是当前的东西。有没有办法在 ReplaySubject 中获取订阅时 observable 的当前值,而不必求助于 BehaviorSubject?
东西.service.ts:
stuff.component.ts:
android - 如何知道 observable emit 是否是缓存的 BehaviourSubject 值?
我使用 BehaviourRelay 作为源 observable,我喜欢它会在订阅时发出最后一个缓存的值,所以我不需要手动调用 showPlayingState(mPlayStateManager.getCurrentState())。
然而,当我想对订阅中的动画做出反应时,这会带来一个问题,因为我不想在这个缓存的发射上运行动画,当我订阅 onCreate 时会发射,UI 应该只是跳转到不对其进行动画处理的状态。动画应该只在“新”发射的情况下运行
这至少对我来说是一个相当常见的用例,但我在 rx 中很难弄清楚