问题标签 [subject-observer]

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 回答
400 浏览

angular - 使用主题的两个组件之间的角度通信

我有两个角度组件,需要通过单击将一个对象从一个组件传递到另一个组件。我的第一个组件具有以下内容

这里 Event 是我的自定义模型对象:

事件服务文件如下:

我的第二个组件具有以下代码来接收事件数据。

但是,我注意到我无法在第二个组件中接收事件数据。我在这里想念什么?有没有其他方法可以将此事件对象从一个组件传递到另一个组件,而第二个组件不是第一个组件的子组件?

0 投票
2 回答
56 浏览

angular - 更改 URL 时未触发主题

我的应用程序具有以下内容app-routing.module.ts

如您所见,我有两个我称之为“产品”的东西,它们是“表单”和“管理员”,它们分别由 url /forms 和 /admin 访问。

app.component.html如下:

如您所见,我有组件“导航栏”,标记为<navbar></navbar>. 问题是,这个导航栏的内容会根据用户所在的产品而有所不同。为了让事情更清楚,让我们看一下navbar.component.html

而且在navbar.component.ts

因此导航栏内容会因currentProduct属性而异。这个变量将由我调用的可注入服务上存在的主题属性更新ProductContainer(顺便说一句,我知道这个名字很糟糕)。

这是ProductContainerproduct-container.ts)代码:

所以如果我们回到app-routing.module.ts,我们可以看到当 \admin url 被访问时,AdminModule被加载了。这是AdminModule代码:

因此,当访问 \admin url 时,它会将当前产品设置为 Admin,因此导航栏将知道产品已更新。

但问题很简单,导航栏中的订阅没有被触发。

(编辑:部分错误也是由使用引起的private subscription = Subscription.EMPTY;,当我替换为时它表示工作private subscription = new Subscription();

0 投票
1 回答
1385 浏览

angular - 检测主题何时没有更多订阅

我正在实现一个角度服务,让消费者根据他们的 id 观察各种值:

它的本质是这样的:

这是完整的 stackblitz 示例

以上工作正常,但 API 使用起来有点麻烦(在消费者中,我需要手动跟踪所有订阅并确保正确取消订阅)。

我希望有一个返回Observable这样的方法:

因为这将允许我使用管道直接从组件模板订阅我需要的值async,其中 angular 将负责取消订阅观察者。

但是我不太清楚如何实现逻辑以从不再使用它们时删除未使用Subject的 s 。Map有什么好的方法吗?

这是一个带有一些测试用例的不完整的 stackblitz 示例

0 投票
1 回答
191 浏览

c# - 在布尔条件下将 Observable 设置为完成

我必须确保完成一个 Observable。它正在观察流数据,这不是我要修改的重点。流数据可能根本不打勾。我遇到了一个主题成员,我可以用它来手动完成 observable。

我怎样才能完成,最好使用 Subject.OnNext() ?

主题触发器只是一个想法。我的偏好是留在观察世界并将序列转换为 Observable.Empty(),例如当调用这样的回调时:

..targeting 使用 OnCompleted()-订阅另一个类中的相关公共 observable。

0 投票
1 回答
63 浏览

angular - 没有从 getRecipe() 获得价值

我试图在从另一个服务获取数据时发出主题,但主题没有将值从 setRecipe() 传递到 getRecipe() 并且在组件的 ngOninit 中没有从服务中获取值。

在配方列表组件中

并且数据是从数据存储服务中的 firebase 获取的,并设置为配方服务的 setRecipe()。我从 Firebase 获取食谱的价值到数据存储服务,并且在 setRecipe() 日志中我得到了价值,但它没有设置我的食谱 [] 的值,因此它没有将值传递给组件。

0 投票
2 回答
355 浏览

angular - Ngxs或行为主体,选择哪个

我将使用处理微服务包的 Angular(最新版本)制作前端应用程序。主要是支付网关产品的管理面板。由于我曾使用过NGXS 状态管理以及主题行为主题,因此想知道在此类处理用户数据的应用程序中哪个更好。请告诉我 ...

0 投票
2 回答
832 浏览

angular - RxJs 主题在订阅时获得多个值

我的 Angular 服务中有一个主题,如下所示:

在我的父组件中,我订阅了getSub(). 从我的子组件中,我发送了一个下一个值,但在父组件中,我收到了两个订阅值。

只需要一个值,以便我的代码块只执行一次:

0 投票
1 回答
512 浏览

angular - 在角度服务中使用变量和使用主题创建可在整个应用程序中使用的全局变量之间的区别?

Angular 8 为我们提供了 rxjs 库,我们可以使用该库中的主题来设置可以在我们的应用程序中全局使用的数据,方法是在服务文件中声明它,我们可以做的同样是在服务文件中声明一个变量并在全局范围内使用它在我们的应用程序中。在这种情况下,使用主题而不是变量有什么好处吗?

0 投票
3 回答
1088 浏览

angular - 主题订阅未在组件中触发

当我尝试订阅 Subject folder_id 时,当我在 files 组件中传递 id 时,它没有订阅 board 组件。

当在文件组件中按下按钮时会触发此 boardId 函数。activateId 是从 url 的快照中获取的 id。

这是 board 组件中的 ngOnInit,它必须订阅从 files 组件发出的 id。但是由于某种原因,当我尝试获取此组件中的 id 时,它不会运行此订阅功能。

现在这是 service.ts 文件:-

有人可以帮我解决这个问题吗,我已经坚持了很多天了。谢谢你。

0 投票
1 回答
222 浏览

android - 哪个更可取:Rx-Subject 或 Android BroadcastReceiver

我在 Github 中有以下项目:https ://github.com/alirezaeiii/ExoPlayer-Service我使用 Assets 中的 ExoPlayer 播放音乐。

当我点击播放/暂停按钮时,我向播放/暂停 ExoPlayer 发送广播:

这是我在我的 Android 服务中注册的 BroadcastReceiver :

另一种方法是使用 Rx-Subject。所以在我的活动中,我使用 onNext() 播放/暂停 ExoPlayer :

在服务中,我有以下 Disposable,我在 onDestroy() 中进行了处理:

广播和 Rx-Subject 都按预期工作,但在您看来,哪一个比另一个更可取,为什么在我的情况下?