问题标签 [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 回答
3678 浏览

angular - 从 BehaviorSubject 创建的 Angular 2 rxjs observables 不适用于 forkJoin

我正在尝试使用Observable.forkJoin并且订阅处理程序永远不会受到打击。forkJoin 运算符在我的应用程序的其他部分为我工作,在非工作场景中我能想到的唯一区别是 observables 是使用它的函数 从BehaviorSubject对象创建的。asObservable()

此订阅被击中

这个不

当然,在我的实际用例中,有不止一个 obseravble,这就是我首先使用 forkJoin 的原因。

是否需要对 BehaviorSubject 进行其他操作才能使其与 forkJoin 一起使用?

更新:

在对 RxJs 文档进行了更多调查后,我意识到它Observable.combineLatestforkJoin……更适合我的需要。链接在这里,以防万一遇到这个 SO 帖子: http://reactivex.io/rxjs/class/es6/Observable。 js~Observable.html#static-method-combineLatest

0 投票
1 回答
975 浏览

angular - 主题 - 对每个下一个值应用更改 [BehaviorSubject.onBeforeNext?]

假设你有一个简单的 BehaviorSubject

这样做instance.countryOfBirth会返回最后一个值instance.countryOfBirth = CountryEnum.US并将新值推送到主题。

我遇到的问题是我将此主题实例传递给自定义模型驱动的表单模块,默认情况下该模块会错误地传递字符串而不是我的CountryEnum类的实例。

我可以在表单模块中解决此问题,但我希望尽可能将其与任何特定于应用程序的逻辑分离,以便在 BehaviorSubject 实例本身中实现修复更有意义。

我的问题是:在触发其订阅者之前,是否有钩子或任何其他方式对每个“下一个”值应用一些更改?换句话说,在我的代码完成之后

在触发任何订阅者之前,我想检查该值是否为字符串(例如:US),如果是,我想获取相应的 CountryEnum 实例并将其传递给“下一个”调用而不是原始的“美国”字符串。

在代码中它看起来像

但显然onBeforeNext不存在,我似乎无法在 dox 中找到任何可以做我想做的事情。

您的帮助将不胜感激!

0 投票
1 回答
1257 浏览

redux - 在第一次分派后 redux-observable 多个动作

我是这里描述的“registerEpic”实用程序:在 react-router onEnter 钩子中懒惰地添加新史诗是一种有效的做法吗?

我们的代码需要是等量的,但是在服务器端,第一次触发一个动作,一切都很好。但是第二次触发该动作时,史诗似乎获得了该动作的 2 个副本。这是我的代码:

因此,我第一次点击触发此操作的页面(服务器端)一切正常,并且我在控制台中获得了一次“正在进行提取”。

但是,刷新页面会产生其中 2 条控制台消息,并且不会触发结果操作。

我在我的史诗注册表中添加了一个“清除”功能,但也许我完全是菜鸟酱,只是没有完全理解它。这是我的中间件:

0 投票
1 回答
808 浏览

android - RxJava:BehaviorSubject 未从源 Observable 接收后续排放

我在尝试使用BehaviorSubject(via RxRelay.BehaviorRelay) 来存储来自连续的最新发射时遇到了麻烦Observable

通过“连续”,我的意思是源Observable被设计为在底层数据集发生变化时发出数据。

BehaviorSubject订阅了source Observable

看来,一旦我订阅了BehaviorSubject,我似乎只收到从源发出的第一个值ObservableBehaviorSubject. 源Observable似乎不再连续发射,事实上,不再发射任何物品。

所以,这是一个有点做作的例子:

BehaviorSubject现在,从某处订阅:

0 投票
1 回答
4236 浏览

angular - 在 Angular 中的整个应用程序中发送和广播事件

有没有办法在 angular2 中发出可以在整个应用程序中收听的事件?就像我们在 AngularJS 中使用$rootScope.broadcastand一样emit。可以在angular2中实现同样的事情吗?我阅读@Output()EventEmitter()实现了它,但它只限制父母收听孩子发出的事件。

我读到了BehaviorSubject成为做到这一点的方法之一。这是正确的方法吗?对此还有其他解决方案吗?

0 投票
0 回答
350 浏览

angular - 在 Angular 2 组件中访问 Observable 值

我需要在 addToCart() 方法中访问当前产品。

现在我已经实现了这种“旧时尚”的方式。模型和 id 使用隐藏的输入字段保存在产品视图中,但这感觉是多余的。

0 投票
1 回答
678 浏览

angular - 打字稿:过滤 BehaviourSubjet asObservable

我对角度很陌生,我想知道在这种情况下我缺少什么:

在一个服务中,我创建一个BehaviorSubject来存储 Websocket 事件:

然后在另一项服务中,我订阅了Observable我要返回的服务:

但是我得到了错误:Property 'model' does not exist on type 'IWSEvent[]'.在过滤器函数中,而我期望找到一个IWSEvent作为过滤器函数的参数,而不是数组。

我不明白什么?

谢谢

0 投票
2 回答
828 浏览

angular - Angular2 Observable 更新私有变量

不确定我是否正确地问了这个问题,但我有一项服务用于在不同组件之间共享数组对象。但是,当我将新对象提交给服务时,有些东西正在更新我的服务数组中的所有其他对象。

即第一次推送答案 = [{questionId: 1, value: 1}] 第二次推送 {questionId: 1, value: 3} answers = [{questionId: 1, value: 3}, {questionId: 1, value: 3} ]

请注意值如何更改以匹配新推送的答案对象的值。

这是我的服务

这是我的组件

基本上,我希望跨多个组件“共享”一系列答案,但对 BehaviorSubject 和订阅的有限理解令人困惑,为什么在向服务中的数组添加新项目后,它会更新所有其他对象。附带说明一下,如果我将答案 var 更改为只是一个数字,那么当我提交答案时,数组中的值不会改变。

这是一个Plunker,它说明了我所看到的。

0 投票
1 回答
340 浏览

angular - 在 Angular2 中修改 Observable 会导致 BehaviorSubject 触发

在下面的 plunk 中,当您单击 Select Market 时,Observable 将填充一组数据。第一项以黄色突出显示,因为它的属性设置为选中。当焦点位于输入框时,您可以在列表中向下箭头。问题是 BehaviorSubject 每次都在触发并从服务器获取数据列表。如何在每次不触发 searchTerms BehaviorSubject 的情况下修改选定的属性?market-search.component.ts 文件中的方法 searchInputArrowKeyPressed 是处理箭头键的地方。

https://plnkr.co/edit/TBYb5QBau9Vmz8PqQpCl?p=preview

提前感谢您的任何帮助!

0 投票
2 回答
605 浏览

angular - BehaviorSubject 和条件组件显示

我有这个简单的服务:

在我的标签中设置:

现在在我看来显示多个指令,我如何有条件地显示它们?

显然这是行不通的,因为没有===. 有没有ngSwitch等价的?

如何Component根据BehaviourSubject值有条件地显示 s?