问题标签 [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 - 在多组件视图上使用 Observables 实现的 Angularjs 服务
目前,我在 Angular 在将由各种组件使用的服务中实现 Observables 时遇到了麻烦。我遇到了一个问题,基本上是我在组件 C(选项卡样式)中有组件 A 和组件 B。组件 A 是创建一个对象,比如说轮子,组件 B 是创建一辆汽车,它使用下拉菜单从组件 A 中选择哪个轮子。我的问题是,当我创建一个轮子时,我必须刷新页面以获取新的创建的轮子出现在组件 B 的下拉列表中,这就是我尝试实现 Observables 但到目前为止我还没有成功的原因。
服务:
订阅组件:
值得一提的是,当我刷新页面时,我最初可以从我的组件 B 中获取值,但是即使我在我的 Add 方法(在服务中)上具有可观察对象上的 next 函数,当我添加任何东西时,即使对象是插入数据库。
任何帮助都非常感谢,在此先感谢。
angular - Angular,访问服务中的路由器参数
我们有一个菜单对象(菜单存储),几个组件将使用它来填充数据。
加载页面时,我希望从服务器加载菜单并将其公开为商店
然后每个组件得到结果
所以我的问题是......目前我们在“menuService”的构造函数中执行操作。据我了解,这并不是真正的最佳实践,因为它不受 Angulars 控制(?)。
那么我们应该怎么做呢?我们应该在 menu.store.ts 中使用“implements OnInit”吗?或者在构造函数中这样做是否有效并且可以,这可能会给我们带来问题吗?
angular - Ngrx:订阅时未在主题中收到当前值
在一个组件中,我使用商店为我的状态的某些部分订阅了一个主题。从那时起,当那部分状态发生变化时,我将开始接收更新,并且我的组件将反映此状态。到目前为止,一切都很好。
但是,我还希望我的组件能够根据此状态的当前值正确初始化。因此,一旦我订阅,我还希望发出当前值 - 例如,我的视图可以正确初始化。
带有 Angular 组件的示例:
我的.component.ts
我的.component.html
我相信我想要/期望的是我商店的这一部分会返回 aBehaviorSubject
或 a ReplaySubject(1)
。但是从商店中选择任何东西总是返回一个Store<T>
显然是某种主题的,但似乎在订阅时不会发出当前值?
我猜,可能的工作是在应用程序初始化时订阅这个状态,然后通过它的所有子组件传递这个值,一直到这个,所以这个组件变成了一个愚蠢的,而不是选择从商店本身。这可能是要走的路吗?还是我缺少一些基本的东西来完成这项工作?
angular - 给 BehaviorSubject 初始值 - 值是 Observable
我知道我不能给出BehaviorSubject
Observable 值,但我需要一种方法来解决这个问题。在应用程序初始化时,我正在获取当前用户(如果存在),我需要提供该BehaviorSubject
潜在值。所以我的服务代码如下所示:
那么是否有一些神奇的 rxjs 运算符来解决这个问题,或者其他一些可能性?
提前致谢!
angular - 如何从代码更新 Observable / BehaviorSubject?
我需要更新可观察对象的属性。我设法让它工作,但我真的不喜欢我是怎么做到的。
在这种情况下,是否有更优雅的方式来更新filter$
值对象?
filter$.next(_.clone(filter$.value))
我真的不喜欢每次我只想通过代码更新被观察对象的一些属性时,将可观察对象的克隆喂给自己的想法。我_.clone()
用来破坏引用(否则 rxjsdistinctUntilChanged()
不会因为明显的原因触发)。
是否有某种 rxjs 扩展可以缩短我正在做的事情?我正在考虑一些filter$.commitValueChanges()
内部会做的事情filter$.next(_.clone(filter$.value))
。
我对 observables 很陌生,所以我不确定我是否一开始就以完全错误的方式考虑这个问题。我知道当我想触发更改侦听器时,我应该提交新状态。我不确定您是否应该直接修改 filter$.value ?或者你通常应该有两个对象 - filter
(过滤器)和filter$
(可观察的过滤器),然后绝对不会filter$
直接改变,而是在每次发生更改时简单filter
地.next()
提交filter
?但这似乎是多余的,因为我们现在有两个对象,我们正在通过应用程序更改一个对象,并且必须通过附加各种事件处理程序来手动处理,而所有这些只是为了能够更新另一个对象 -filter$
. 这对我来说似乎太过分了。
谢谢。
angular - Rxjs 组合流
好的,基本上我想要实现的是一个依赖于另一个可观察对象的可观察对象,例如联合查询。为了详细说明,我有两张表,一张是活动,另一张是这些活动的最终日期,所以我要做的是首先获取活动,然后搜索这些活动的最终日期,最好是能够结合这两个流以在单个新对象中返回一个包含活动和最终日期的数组。
我尝试了不同的实现,但没有任何运气。
这是我实现 service.ts 的方式(表的两个服务是相同的):
以及我尝试实现这一点的各种方法(在 component.ts 上):MergeMap
(这不会编译)
平面图:
这确实编译但不起作用
最后一个是我最接近它的工作,但我知道这是一个糟糕的 observables 实现:
我在使用这种方法时遇到的另一个问题是,如果嵌套的 observable 什么都不返回,它就不起作用,所以我不得不做一个即兴的解决方案,但我想知道如果嵌套的 observable 什么都不返回,flatMap 或 mergeMap 是否不起作用
angular - 在多个组件之间共享数据 - 由于对象引用而导致的问题
我正在实现一个数据存储服务来在多个兄弟组件之间共享数据。每个组件都需要收到有关数据存储更改的通知。数据存储不会自行填充,需要从控制器设置数据。
数据存储.ts
在这ngInit
两个组件的方法中,我订阅了数据存储:
问题:this.documentIssue
任何组件的更改都会导致:
- 更改
this.documentIssue
订阅的所有其他组件中的实例 ( ) - 更改存储中的实例 (
this._documentIssue.getValue()
)
setValue
目标: - 在组件中拥有单独的对象,可以通过调用方法对其进行更改然后发送到商店
rxjs - 从 BehaviorSubject 对共享映射的第二次订阅未执行
BehaviorSubject
当我从实例 ( )订阅共享映射时t
,只执行第一个订阅。
当原始BehaviorSubject
( obj
) 发出第二个值时,仅打印最新值,并且两个订阅都已执行。
让检查我的代码
我的预期结果是
但实际结果是
抱歉这个天真的问题。有没有人可以向我解释这个?
太感谢了
angular - Angular,在独立组件之间进行通信的最佳方式是什么。?
我的 Angular 4 应用程序中有两个组件,比如 listComponent 和 searchComponent,它们没有任何关系。我想在从 searchComponent 中选择搜索条件时调用 listComponent 中的函数。考虑到性能,哪种方法是最好和最有效的方法?
任何一个:
1)我可以将输出事件传递给root并使用数据服务进行数据更改,即切换组件显示并从公共服务获取数据。在这里,我每次都必须调用 ngAfterViewChecked() 或 ngOnChange() 并使用一些标志来了解从 searchComponent 中选择了新的 Search。
2) 在数据服务中使用 rxjs/behavioralSubject 并从 searchComponent 中设置它并在 listComponent 中订阅它。
angular - 除非我刷新页面,否则无法获得正确的 BehaviorSubject 值
我的 BehaviorSubject 没有向我的观察者推送它的新价值时遇到了麻烦。我遵循了本教程https://netbasal.com/angular-2-persist-your-login-status-with-behaviorsubject-45da9ec43243但没有运气。我还试图在 SO 和博士上找到一些东西。谷歌,但也没有运气。我不知道我做错了什么。
这是我的 Authservice 和与之交互的组件的代码。
认证服务
导航组件.ts
nav.component.html只有问题代码*
navcomponent 是 app 模块的一部分,authservice 是 user 模块的一部分
用户模块.ts
app.module.ts
我希望有人可以帮助我解决我做错的事情。
帮助我 Obi-one Kenobi,你是我唯一的希望 - 莉亚公主,新的希望