问题标签 [angular2-observables]

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

angular - 对使用可观察对象和异步管道的 Angular 2 组件进行单元测试

使用使用异步管道的可观察数据服务直接在视图中更新数据,这证明很难测试(正常工作)。

我希望能够更新视图,触发点击事件,然后测试模型是否已正确更新(作为点击的结果),但在测试中,异步管道在其绑定的 observable 触发时不会呈现任何内容事件。所以我无法在测试中与DOM进行交互并测试交互的结果。

找不到任何人专门使用异步管道对组件进行单元测试的例子,所以我很茫然。任何反馈表示赞赏。

测试:

模板:

零件:

模拟服务。get() 通常包含对 http 提供程序的调用,但在模拟中,我只是在模拟主题上使用模拟模型调用 next 并返回可观察对象。

0 投票
1 回答
674 浏览

node.js - 如何使用 Angular 2 和 Node.js 开发实时文件上传?

通常,当我们上传文件时,它会先将文件放到临时目录,然后再将其移动到所需的目录。但我正在研究大数据,例如一次上传数千个文件。所以我需要将这些文件直接上传到所需的位置,并且随着每个文件上传到该目录,用户必须实时看到仪表板上的更改。

我还需要向用户展示

  1. 如果上传时发生任何异常,例如,如果文件在上传过程中导致问题。
  2. 应该有一个选项可以跳过该文件或重试上传。报告以显示成功上传的文件与上传失败的文件的列表。
  3. 如果有任何网络中断,上传管理器应继续重试,直到网络恢复。
  4. 用户可以暂停上传并可以在下次登录时重新启动(如果可行)

这是关于上传过程的完整操作,以便在上传大量数据时为用户提供最佳用户体验。

0 投票
1 回答
214 浏览

angular - Angular 2 Observable Dataservice 获取 Observable 项

我刚刚开始使用 Angular 2 中的 Observables 并且有一个问题。

我的数据服务类中有一个名为 getExplorerPageData 的方法,该方法进行了一个 http 调用,该调用返回一个带有几个数组的数据结构。我想要一个名为 getTag 的附加函数,它可以检索在 getExplorerPageData() 调用中检索到的项目之一。

需要明确的是,我不想在调用 getTag 时再次访问服务器,我宁愿从已经对 getExplorerPageData() 进行的调用中检索项目。

我想知道最好的方法是什么?

0 投票
1 回答
525 浏览

angularjs - 等到http get完成并返回数据

我正在使用 http 从服务器获取数据,在service.ts

在我的组件中,我想使用 highchart 显示这些数据,问题是当我单击按钮时图表中没有显示任何内容,我认为当我单击时数据还没有准备好

组件.ts:

单击按钮时的方法:控制台在打印对象之前打印“GGGGG”和“PPPPP”:

在将它们发送到图表之前,如何获取所有数据?

0 投票
1 回答
10802 浏览

angular - angular 2 Observable Complete 未调用

我正在玩从 Angular 2 教程开始的英雄应用程序,现在我有这个组件

问题是,如果我理解正确,订阅需要三个回调参数.subscribe(success, failure, complete);。但在我的情况下,完整的部分永远不会执行。我想这与 switchMap 的工作方式有关。我对吗?

0 投票
1 回答
190 浏览

angular - Angular RC6 - 使用自己的数据创建可注入服务

我有一个数据模型(应该是应用程序中的单个实例)

我认为最好的方法是通过可注射服务将其退回。

它应该位于 CoreModule 中。

如何实现 DataService.getComputer() 以返回 Observable ?之前创建的c ...

编辑

在这种getComputer()方法中,我需要模拟网络延迟 - 将超时设置为 2 秒。以前我正在使用Promise,这个功能是:

它是这样消耗的:

现在我想把它翻译成使用 Observables,然后放入 inot 核心模块。

在 Günter Zöchbauer 回答之后,我尝试关注

但 VSC 突出显示let res ...带有错误消息的行[ts] Supplied parameters do not match any signature of call target. (alias) new BehaviorSubject<T>(_value: T): BehaviorSubject<T>。我BehaviorSubjectrxjs/rx.

编辑

在 Günter Zöchbauer 的另一条注释之后,我更改了服务类别代码

现在提到的错误在这里:let s = new BehaviorSubject<Computer>();。在这种情况下,我也不知道如何以 2 秒延迟将Computer实例添加到流(使用next())中 - 我将其放入ngInit.

0 投票
0 回答
76 浏览

angular - angular2多组件交互加速

我有一个由六个不同组件组成的页面。基于用户与其中一个组件的交互(固定 - 由 css 元素组成,这些元素具有与它们相关联的悬停和单击等事件),我想更新其余五个组件的显示(highcharts 图表 - 每个组件,更新基本上是数据系列的亮点)。我目前通过服务使用 observables 进行信息传输(哪个事件发生在哪个 css 元素 -> 图表组件上)。虽然它工作正常,但速度很慢。如果我只有一个图表组件而不是多个图表组件,它的工作速度非常快,因此我猜测延迟与信息传输有关。我想知道是否有解决此方法或其他方法来执行数据传输的方法。

0 投票
0 回答
1421 浏览

angular - Angular2 CanDeactivate 与异步可观察

我正在研究 Guards 并试图阻止使用 CanDeactivate 进行导航。我想用保存/取消显示一个简单的模式,保存 = 导航,好吧,取消 = 取消。

我有 CanDeactivate 工作,但它似乎没有在正确的时间解决

Guard.ts

组件.ts

在第一次“保存”时,一旦显示模态,什么都不会发生。在第二个“保存”上,导航会在我回答模态之前发生。我怎样才能让它在正确的时间解决?

0 投票
1 回答
26 浏览

json - Angular2 (rc.6) JSON 对象键未被访问

我正在开始我的第一个 Angular2 (rc.6) 项目。我有一个 JSON 对象已成功发送到组件,但我无法在模板中访问其键值。

服务(摘录):

组件(摘录):

~

模板(摘录):

我无法弄清楚的问题是{{ song | json }} 正确输出一个 JSON 对象: { "id": 71, "title": "It Don't Mean A Thing" ... } 并且没有抛出错误。但是其他 var 键不会被渲染。

有任何想法吗?

0 投票
0 回答
337 浏览

rxjs - 使用 AngularFire2,我如何转换包含其他 Observables 的 ObservableList 中的数据

我对此有点陌生,所以请耐心等待。我会尽力解释。我正在使用 AngularFire2 并将数据作为列表检索。就我而言,我正在尝试获取与帐户关联的交易列表(请参阅下面的示例数据)。

样本数据

我的第一步是从账户中获取交易列表:

这给了我一个可观察的对象数组,如下所示:

然后我想用交易节点的实际交易细节完全替换这两个对象。所以是这样的:

这种排序让我得到了我想要的,除了我现在有一个可观察的可观察数组而不是像这样的对象:

只要我像这样使用 async 和 Elvis 运算符,我就可以让它在我的模板中工作:

我还需要将帐户名称作为每个对象或可观察对象的一部分,因此我最终将其更改为如下内容:

好的,所以这确实有效,但现在我想转换这些数据,以便我的服务返回更简洁的内容。您在下面的示例数据中看不到的是,交易和账户中的每一个都有更多的数据点。我不需要也不想要响应中的那些,所以我想稍微清理一下。最后,我想用一个可观察的对象数组来响应,就像最初的 angularfire2 调用一样。现在我有一个可观察的对象数组,如下所示:

我真的很想拥有更多这样的东西:

因此,我需要弄清楚如何从这些可观察值中获取值,并且我正用头撞墙试图弄清楚。有人有什么建议吗?我确定我在这里遗漏了一些简单的东西。

我发现的大多数解决方案都建议使用 flatMap 或 concatMap,但这最终给了我一个可观察的单个对象,而不是一个包含对象的可观察数组。