问题标签 [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 - 如何将 Observable 实现为 BehaviorSubject 集合的子集
我有一个 BehaviorSubject 图片(因为在某些情况下我需要 .getValue() )和一个 Observable 表示标记为收藏的图片,它是图片的子集。我的代码有效,这里是:
但是我觉得这种语法很“重”,有没有更简洁的方法将 Observable 绑定为 BehaviorSubject 的子集?
angular - Angular 2+ 仅订阅可观察的更改
所以这里是场景。我有一个带有 BehaviorSubject 的用户服务和一个返回此 BehaviorSubject 的 observable 的方法。我的第二个文件是订阅 observable 的标头组件。问题是.. 是否可以仅订阅更改,或者我是否需要在之前有一些逻辑this.userSubject.next(this.user)
?
以下是代码供参考:
和这里
angular - 使用 getter 进行更改检测
我正在ExpressionChangedAfterItHasBeenCheckedError
使用 getter 和 BehaviorSubject(很有趣,对吗?)。
这是组件中的代码
commonService.windowHeight
是一个 BehaviorSubject。在普通浏览器中运行此代码时,一切都很好。
当我尝试使用该组件运行单元测试时,我的问题就出现了。所有导入、声明和提供程序都很好,并且仍然可以通过这样的简单测试
它抛出Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '0px'. Current value: '865px'.
这里可能是什么问题?环境:Angular 4.0.2、Angular CLI、业力、无头 Chrome。
谢谢!
ionic2 - Angular 2:BehaviorSubject/Subject 在构造函数之外不起作用
嗨,我需要将数据从一个组件传递到另一个组件,为此我使用的是 BehavorSubject 类(我也尝试过使用 Subject 类,但对我不起作用)。This is my code: Home page has a filter, and when is selected a filter, it called the service and it service should change a variable of homePage
angular - 正确改变 BehaviorSubject 对象
这是我的 Angular 服务的一部分:
仅更改一个字段/属性user
并再次重新发送整个对象的正确方法是什么?
angular - 通过使用 Angular 2 中的 Observable 和 Subject 在多个组件与服务之间进行通信
我是 rxjs 的新手,所以我想问一个关于Angular 2
,Observables
和BehaviorSubject/Subject
.
所以,我想要实现的是:onclick
一个button
里面的一个ComponentA
来通知其他组件,例如ComponentB
,ComponentC
.
到目前为止我所做的是创建一个service
:
然后有一个组件provide menuService
调用this.menuService.toggleMenu()
改变 的值BehaviorSubject
。代码 :
还有另一个组件,OnInit()
subscribes
它getMenuState()
是一个Observable
,但它的值只在OnInit()
. 代码:
该complete
函数永远不会被调用。
有什么想法我做错了什么,或者我在逻辑上遗漏了什么?
--
编辑:所以,为了解释更多问题是我可以看到可观察对象具有 oninit 的第一个值,但没有别的。之后没有错误没有完成,或者没有“下一个”值,这是错误的,因为我从主题发送了新值。最后,问题出在组件的提供者列表上,而不是 observables 或主题的问题,但在解决问题之前,不容易看出问题就在那里。
angular - Angular 4 - 服务中的 rxjs BehaviorSubject 使用
我的服务代码如下所示 -
数据服务
搜索组件(点击上述服务并订阅)如下所示 -
如上所述,观察组件的 subscribe 方法中没有控制,因为没有打印任何日志,而且我在控制台中也没有收到任何错误。不确定我是否以正确的方式使用 BehaviorSubject。
我试图按照以下链接进行操作-
Angular 2 - 行为主体与可观察?-> 不输入这里提到的订阅。
http-observables -> 当我尝试这种方式时,它确实输入了订阅但随后会引发日志错误 -
无法读取 null 的属性 xyz,因为即使在我从服务获取数据之前就打印了组件日志。在我收到上述错误后,稍后打印了服务日志。
我的意图不是从 SearchComponent 本身订阅服务的 BehaviorSubject。我只是想测试我是否从任何组件中的服务中获取值。我相信它与从需要serviceRequestDto值的任何其他组件订阅一样好,因为订阅的语法在所有组件中都保持不变。
更新1:
我尝试按照 Brandon 的建议使用 ReplaySubject(1),但在订阅组件中的主题时我仍然遇到错误。
TypeError:无法读取未定义的属性“名称”(…)
我更新的服务代码现在看起来像这样 -
请注意,我之前在服务代码中使用了以下内容 -
我更新的搜索组件代码如下所示 -
早期组件代码订阅主题的方式不同,尽管没有错误,但控件从未进入组件的订阅内部。
我的初始代码与我现在发布的不同,它基于以下链接-delegation-eventemitter-or-observable-in-angular2
java - 为什么 onSubscribe 在 rxjava 中不起作用?
当我在代码下面运行时,如果我不写observeOn
行,应用程序会崩溃,因为getView().showBlockLayout(isBlock);
调用了一个尝试隐藏或显示布局的方法。但我试图在下面更改observeOn(AndroidSchedulers.mainThread())
为subscribeOn(AndroidSchedulers.mainThread())
应用程序再次崩溃!
我也对此进行测试:
出乎意料的是它起作用了并且没有崩溃!我没有在 getBlockObservable 方法中使用 subscribeOn(因为我知道我们可以设置一次)
这是我的UserStore
课
这是我在 gradle 中导入 rxjava 依赖项的方式
angular - 创建为所有组件提供单例服务的子模块
我正在尝试使用共享服务的组件制作一个模块。一个组件(graphview)订阅了一个 BehaviorSubject 的 observable。另一个组件 ( chart-type ) 稍后通过调用服务 ( chart-config ) 中的函数来更新 BehaviorSubject。问题是服务调用何时不ChartTypeComponent
更新。我假设正在使用该服务的多个实例,但我不确定如何修复它。.next(data)
GraphviewComponent
GraphModule
(它们的父模块)在声明中具有ChartTypeComponent
和在提供者中。GraphviewComponent
ChartConfigService
chart-config.service.ts看起来像:
graphview.component.ts导入服务和订阅。它不提供服务。
和
chart-type.component.ts仅导入服务,并调用 chartconfigService.updateChartConfig :
和
我找到了相关的问题和答案:
委托:Angular2 中的 EventEmitter 或 Observable
Angular2 Observable BehaviorSubject 服务不工作
但我无法弄清楚我做错了什么。如何在调用 updateChartConfig 时让graphview.component.ts更新?
注意:所有调用/方法/等都有效,并且在调用 updateChartConfig() 后this._chartconfig.next(data).getValue()
显示 BehaviorSubject 正在服务中正确更新。graphview.component.ts 根本没有接收到新数据。
更新:
GraphviewComponent
将s ngOnInit()更改为的结果
在控制台中生成:
但是在 OnInit 之后永远不会触发(当ChartTypeComponent
调用 updateChartConfig() 时)。
更新 2: 很明显根是在注入服务,而不是 GraphModule:
我仍然希望子模块提供服务,以便它包含在子模块中。