问题标签 [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.
angular - 从 BehaviorSubject 创建的 Angular 2 rxjs observables 不适用于 forkJoin
我正在尝试使用Observable.forkJoin
并且订阅处理程序永远不会受到打击。forkJoin 运算符在我的应用程序的其他部分为我工作,在非工作场景中我能想到的唯一区别是 observables 是使用它的函数 从BehaviorSubject
对象创建的。asObservable()
此订阅被击中
这个不
当然,在我的实际用例中,有不止一个 obseravble,这就是我首先使用 forkJoin 的原因。
是否需要对 BehaviorSubject 进行其他操作才能使其与 forkJoin 一起使用?
更新:
在对 RxJs 文档进行了更多调查后,我意识到它Observable.combineLatest
比forkJoin
……更适合我的需要。链接在这里,以防万一遇到这个 SO 帖子:
http://reactivex.io/rxjs/class/es6/Observable。 js~Observable.html#static-method-combineLatest
angular - 主题 - 对每个下一个值应用更改 [BehaviorSubject.onBeforeNext?]
假设你有一个简单的 BehaviorSubject
这样做instance.countryOfBirth
会返回最后一个值instance.countryOfBirth = CountryEnum.US
并将新值推送到主题。
我遇到的问题是我将此主题实例传递给自定义模型驱动的表单模块,默认情况下该模块会错误地传递字符串而不是我的CountryEnum
类的实例。
我可以在表单模块中解决此问题,但我希望尽可能将其与任何特定于应用程序的逻辑分离,以便在 BehaviorSubject 实例本身中实现修复更有意义。
我的问题是:在触发其订阅者之前,是否有钩子或任何其他方式对每个“下一个”值应用一些更改?换句话说,在我的代码完成之后
在触发任何订阅者之前,我想检查该值是否为字符串(例如:US),如果是,我想获取相应的 CountryEnum 实例并将其传递给“下一个”调用而不是原始的“美国”字符串。
在代码中它看起来像
但显然onBeforeNext
不存在,我似乎无法在 dox 中找到任何可以做我想做的事情。
您的帮助将不胜感激!
redux - 在第一次分派后 redux-observable 多个动作
我是这里描述的“registerEpic”实用程序:在 react-router onEnter 钩子中懒惰地添加新史诗是一种有效的做法吗?
我们的代码需要是等量的,但是在服务器端,第一次触发一个动作,一切都很好。但是第二次触发该动作时,史诗似乎获得了该动作的 2 个副本。这是我的代码:
因此,我第一次点击触发此操作的页面(服务器端)一切正常,并且我在控制台中获得了一次“正在进行提取”。
但是,刷新页面会产生其中 2 条控制台消息,并且不会触发结果操作。
我在我的史诗注册表中添加了一个“清除”功能,但也许我完全是菜鸟酱,只是没有完全理解它。这是我的中间件:
android - RxJava:BehaviorSubject 未从源 Observable 接收后续排放
我在尝试使用BehaviorSubject
(via RxRelay.BehaviorRelay
) 来存储来自连续的最新发射时遇到了麻烦Observable
。
通过“连续”,我的意思是源Observable
被设计为在底层数据集发生变化时发出数据。
BehaviorSubject
订阅了source Observable
。
看来,一旦我订阅了BehaviorSubject
,我似乎只收到从源发出的第一个值Observable
到BehaviorSubject
. 源Observable
似乎不再连续发射,事实上,不再发射任何物品。
所以,这是一个有点做作的例子:
BehaviorSubject
现在,从某处订阅:
angular - 在 Angular 中的整个应用程序中发送和广播事件
有没有办法在 angular2 中发出可以在整个应用程序中收听的事件?就像我们在 AngularJS 中使用$rootScope.broadcast
and一样emit
。可以在angular2中实现同样的事情吗?我阅读@Output()
并EventEmitter()
实现了它,但它只限制父母收听孩子发出的事件。
我读到了BehaviorSubject
成为做到这一点的方法之一。这是正确的方法吗?对此还有其他解决方案吗?
angular - 在 Angular 2 组件中访问 Observable 值
我需要在 addToCart() 方法中访问当前产品。
现在我已经实现了这种“旧时尚”的方式。模型和 id 使用隐藏的输入字段保存在产品视图中,但这感觉是多余的。
angular - 打字稿:过滤 BehaviourSubjet asObservable
我对角度很陌生,我想知道在这种情况下我缺少什么:
在一个服务中,我创建一个BehaviorSubject
来存储 Websocket 事件:
然后在另一项服务中,我订阅了Observable
我要返回的服务:
但是我得到了错误:Property 'model' does not exist on type 'IWSEvent[]'.
在过滤器函数中,而我期望找到一个IWSEvent
作为过滤器函数的参数,而不是数组。
我不明白什么?
谢谢
angular - Angular2 Observable 更新私有变量
不确定我是否正确地问了这个问题,但我有一项服务用于在不同组件之间共享数组对象。但是,当我将新对象提交给服务时,有些东西正在更新我的服务数组中的所有其他对象。
即第一次推送答案 = [{questionId: 1, value: 1}] 第二次推送 {questionId: 1, value: 3} answers = [{questionId: 1, value: 3}, {questionId: 1, value: 3} ]
请注意值如何更改以匹配新推送的答案对象的值。
这是我的服务
这是我的组件
基本上,我希望跨多个组件“共享”一系列答案,但对 BehaviorSubject 和订阅的有限理解令人困惑,为什么在向服务中的数组添加新项目后,它会更新所有其他对象。附带说明一下,如果我将答案 var 更改为只是一个数字,那么当我提交答案时,数组中的值不会改变。
这是一个Plunker,它说明了我所看到的。
angular - 在 Angular2 中修改 Observable 会导致 BehaviorSubject 触发
在下面的 plunk 中,当您单击 Select Market 时,Observable 将填充一组数据。第一项以黄色突出显示,因为它的属性设置为选中。当焦点位于输入框时,您可以在列表中向下箭头。问题是 BehaviorSubject 每次都在触发并从服务器获取数据列表。如何在每次不触发 searchTerms BehaviorSubject 的情况下修改选定的属性?market-search.component.ts 文件中的方法 searchInputArrowKeyPressed 是处理箭头键的地方。
https://plnkr.co/edit/TBYb5QBau9Vmz8PqQpCl?p=preview
提前感谢您的任何帮助!
angular - BehaviorSubject 和条件组件显示
我有这个简单的服务:
在我的标签中设置:
现在在我看来显示多个指令,我如何有条件地显示它们?
显然这是行不通的,因为没有===
. 有没有ngSwitch
等价的?
如何Component
根据BehaviourSubject
值有条件地显示 s?