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

angular - 如何将 Observable 实现为 BehaviorSubject 集合的子集

我有一个 BehaviorSubject 图片(因为在某些情况下我需要 .getValue() )和一个 Observable 表示标记为收藏的图片,它是图片的子集。我的代码有效,这里是:

但是我觉得这种语法很“重”,有没有更简洁的方法将 Observable 绑定为 BehaviorSubject 的子集?

0 投票
2 回答
9148 浏览

angular - Angular 2+ 仅订阅可观察的更改

所以这里是场景。我有一个带有 BehaviorSubject 的用户服务和一个返回此 BehaviorSubject 的 observable 的方法。我的第二个文件是订阅 observable 的标头组件。问题是.. 是否可以仅订阅更改,或者我是否需要在之前有一些逻辑this.userSubject.next(this.user)

以下是代码供参考:

和这里

0 投票
0 回答
1294 浏览

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。

谢谢!

0 投票
1 回答
553 浏览

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

0 投票
1 回答
1372 浏览

angular - 正确改变 BehaviorSubject 对象

这是我的 Angular 服务的一部分:

仅更改一个字段/属性user并再次重新发送整个对象的正确方法是什么?

0 投票
3 回答
5370 浏览

angular - 通过使用 Angular 2 中的 Observable 和 Subject 在多个组件与服务之间进行通信

我是 rxjs 的新手,所以我想问一个关于Angular 2,ObservablesBehaviorSubject/Subject.

所以,我想要实现的是:onclick一个button里面的一个ComponentA来通知其他组件,例如ComponentBComponentC.

到目前为止我所做的是创建一个service

然后有一个组件provide menuService调用this.menuService.toggleMenu()改变 的值BehaviorSubject。代码 :

还有另一个组件,OnInit() subscribesgetMenuState()是一个Observable,但它的值只在OnInit(). 代码:

complete函数永远不会被调用。

有什么想法我做错了什么,或者我在逻辑上遗漏了什么?

--

编辑:所以,为了解释更多问题是我可以看到可观察对象具有 oninit 的第一个值,但没有别的。之后没有错误没有完成,或者没有“下一个”值,这是错误的,因为我从主题发送了新值。最后,问题出在组件的提供者列表上,而不是 observables 或主题的问题,但在解决问题之前,不容易看出问题就在那里。

0 投票
1 回答
4838 浏览

angular - BehaviorSubject 未定义问题

我正在尝试在我的服务中创建一个变量,每当我注入此服务时都可以访问该变量。但是,我无法填充我login$的 BehaviorSubject 类型。我检查了thisthis,但我很难理解它是如何工作的。

零件

登录服务

另外,我想login$在我的DriverService. 这是我到目前为止所做的:

司机服务

如何正确填充并使其可用于其他服务?

谢谢

0 投票
2 回答
8790 浏览

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

0 投票
1 回答
482 浏览

java - 为什么 onSubscribe 在 rxjava 中不起作用?

当我在代码下面运行时,如果我不写observeOn行,应用程序会崩溃,因为getView().showBlockLayout(isBlock);调用了一个尝试隐藏或显示布局的方法。但我试图在下面更改observeOn(AndroidSchedulers.mainThread())subscribeOn(AndroidSchedulers.mainThread())应用程序再次崩溃!

我也对此进行测试:

出乎意料的是它起作用了并且没有崩溃!我没有在 getBlockObservable 方法中使用 subscribeOn(因为我知道我们可以设置一次)

这是我的UserStore

这是我在 gradle 中导入 rxjava 依赖项的方式

0 投票
0 回答
386 浏览

angular - 创建为所有组件提供单例服务的子模块

我正在尝试使用共享服务的组件制作一个模块。一个组件(graphview)订阅了一个 BehaviorSubject 的 observable。另一个组件 ( chart-type ) 稍后通过调用服务 ( chart-config ) 中的函数来更新 BehaviorSubject。问题是服务调用何时不ChartTypeComponent更新。我假设正在使用该服务的多个实例,但我不确定如何修复它。.next(data)GraphviewComponent

GraphModule(它们的父模块)在声明中具有ChartTypeComponent和在提供者中。GraphviewComponentChartConfigService

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: 服务树

服务树 2

我仍然希望子模块提供服务,以便它包含在子模块中。