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

asynchronous - 找不到管道“异步”

我正在尝试使用 Angular 2 和 Firebase 构建一个简单的博客,但在组件中使用异步管道时遇到问题。我在控制台中收到错误。

zone.js:344Unhandled Promise 拒绝:模板解析错误:找不到管道“异步”(“

[错误->]{{ (blog.user | async)?.first_name }}

"): BlogComponent@6:3 ; 区域: ; 任务: Promise.then ; 值: 错误: 模板解析错误:(...) 错误: 模板解析错误: 找不到管道'async' ("

blog.component.ts

blog.component.html

app.component.ts

app.component.html

博客服务.ts

仅当我尝试在 blog.component.html 文件中使用异步时才会出现问题。如果我尝试在 app.component.html 文件中打印用户名,它会起作用。我应该在 blog.module.ts 中注入 AsyncPipe 吗?如何让异步在 blog.component.ts 中工作?

0 投票
1 回答
57 浏览

angular - 使用 angular2 的同步网络通话

我有一个具有名称、值和初始名称的 json。当用户单击提交时,我正在检查 json 的每个元素的值和初始值是相同还是不同。如果值和初始值不同,那么我正在使用 Rxjs 调用服务调用。如果所有元素的初始值和值都相同,则应显示错误消息“错误数据未更改”。但由于 angular2 调用是异步的,我无法做到这一点。

我的json是这样的-

单击提交按钮时,我正在调用此函数-

现在的问题是当我调用这个函数时,网络调用发生了异步调用,流程直接进入 if(anyChangeDetected == false) 块,每次我收到那个警报。我怎样才能避免它?

0 投票
1 回答
296 浏览

angular - Angular 2,我应该采用哪种方法来显示加载指示?

我有一个表格组件:

然后我有一个父组件:

现在,在 ag-page 中,我需要从服务器获取数据,所以我通过服务发出 http 请求,比如说 page.service.ts。此时,我想在我的 ag 表中显示加载指示。

哪个是最好的方法?

  1. 使用@ViewChild 通过ag-page 获取组件实例并将isLoading 设置为true?

  2. 创建一个 table.service.ts,将其注入 TableComponent 并使用 observables 来检测数据何时加载。

  3. 另一个建议?

0 投票
2 回答
978 浏览

angular - Observable 嵌套循环

我想创建一个嵌套的 observable 来保存一个与标签相关的内容。首先保存内容并返回内容 id 以保存标签,内容 id 作为外键,顺便说一下,服务在我的循环中同时发送数据。(后端日志运行并行)我怎样才能让它等到完成后再做下一个

组件.ts

服务.ts

后端日志(用内容保存标签)

看起来它几乎同时进入了方法。我怎样才能设法让 savetag 等待一个保存完成然后再做下一个?

0 投票
1 回答
914 浏览

angular - 加载资源失败:Safari 9.1.2 中的 Observable.js.map

我在 Angular 2 final 和 Angular-cli 中使用 observables。

  • Angular 2.0.0 最终版
  • 角-cli:1.0.0-beta.15
  • 节点:6.3.0
  • Mac 操作系统: el capan

package.json 中的依赖:

我的应用程序在除 Safari 9.1.2 之外的所有浏览器中都能正常运行——它会向控制台抛出此错误消息:

我尝试在 angular_cli.json 中导入 Rxjs:

另外,我尝试将 rxjs 导入到 app.module.ts 和这样的工作组件中:

但不断收到同样的错误。

难道我做错了什么?很奇怪,只有 Safari 会遇到这个错误。

0 投票
1 回答
2010 浏览

rxjs - 将回调地狱转换为可观察链

我一直在使用我的函数返回 observables 的约定,以实现强制顺序的一系列函数调用,每个函数调用都将返回值传递给它们的后续“回调”函数。但是在阅读和观看教程之后,似乎我可以用我认为的平面图做得更好。我想我很接近这个建议https://stackoverflow.com/a/34701912/2621091虽然我不是从承诺开始的。下面我列出了一些例子,我希望通过更好的方法的建议来帮助清理。我非常感谢您提供的帮助:

0 投票
1 回答
372 浏览

angular - 两个单独的可观察对象Angular 2上的两个顺序订阅

我对 Angular 2 中两个单独的 observables 的两个顺序订阅有疑问。我正在尝试:

  1. 从坐标获取位置
  2. 将此位置附加到我的 json
  3. 发送json到服务器

我这样做的方式是我认为错误的:

这样,我的 DOM 在我实际获取位置后仅更新 5-10 秒。

0 投票
1 回答
1499 浏览

authentication - Angular 2 处理需要身份验证令牌刷新的多个失败请求

我正在为使用访问令牌的 API 制作 Angular 2 前端。我正在尝试使用 observables 和 ngrx/store。

登录和注销工作正常且符合预期。我还编写了一些代码来处理由于令牌过期而导致请求失败的情况。这段代码通常可以正常工作,但是当我在短时间内有多个请求时会遇到麻烦。例如,当我刷新页面并且应用程序尝试填充应用程序所需的两个或三个商店时,就会发生这种情况。


我的身份验证服务具有以下功能:

我的 REST 函数有这样的函数:

我不认为函数currentUser(),refreshToken()authHeader()是理解我的问题所必需的。


如果我有一个失败的请求并且错误是 401,我的应用程序调用refreshLogin(),获取一个新的访问令牌并存储它,然后使用新的访问令牌再次尝试原始请求。

如果我有多个失败的请求,并且它们同时有效地发生,我就会遇到问题。例如,假设我有两个 GET 请求。它们都返回 401 错误。他们都启动了这个refreshLogin()功能。一个refreshLogin()成功并存储一个新的访问令牌;另一个失败,因为用于刷新的令牌不再有效。这个函数流现在失败了,导致我的应用程序停止。

一种解决方案是将我的 GET 请求串联堆叠,但似乎并非必须如此。

我觉得应该有一个解决方案,在失败的 GET(或其他)请求中,应用程序会触发刷新访问令牌的调用。auth 服务会限制这些请求,因此每隔几秒或某事只能有一个。它满足此请求,并将新的访问令牌返回给所有请求以重试。

您认为这是一种明智的方法,还是我只是想修补一种一开始就被错误考虑的方法?你会建议如何让这些部分相互作用?

0 投票
0 回答
497 浏览

angular - 有效捕获 Angular 2 HTTP 错误

我似乎无法从 HTTP Observable 和响应对象中获取可靠的错误信息。在某些情况下,它会报告正确的数据,但在其他时候,我得到的响应对象实际上是空的。

例如: 在此处输入图像描述

进行实际调用的服务通过以下方式创建可观察对象:

在上面的代码中,服务器返回一个带有 JSON 错误响应的 401,但 subscribe() 响应既没有获取响应数据,也没有获取状态代码或消息。错误处理程序触发,但响应对于确定错误信息是无用的。

我尝试在 .subscribe() (如上面的组件中)、.catch() 方法和 .map() (在服务中)上拦截错误处理程序,但在所有情况下,响应中都没有可用数据. 如果没有有效的响应,就不可能向用户返回错误消息

然而,我看过这项工作,但我无法终生看到有什么不同。

我想这样做:

  • 服务方法在服务中进行 HTTP 调用
  • 服务方法具有 .catch( response ) 处理程序并修复错误对象
  • 客户端发出订阅并具有接受错误对象的错误处理程序

这适用于 Promises (.toPromise),但使用原始 Observables 在许多情况下我似乎无法获得正确的错误信息。

关于如何使这项工作可靠地工作以及为什么响应没有返回状态信息的任何建议?

更新:

事实证明,问题是由服务器端进行自动身份验证重定向引起的。如果发生 401,服务器一直在向登录页面返回 302 请求,并且看起来 Observables 正在吃 302 - 没有跟踪,也没有捕获状态代码/原始请求数据。

我将把这个放在操作员错误(我)上,但把它留在这里,以防其他人遇到这种问题。故事的寓意——注意 Observables 的 302 重定向响应。

0 投票
1 回答
2117 浏览

angular - 如何在不重新查询服务器的情况下更新可观察数组中的对象?

我正在尝试创建一个存储来管理我的数据,然后在我的组件中使用该存储。应用程序是用 Ionic2 和 Angular2 构建的。

更新

这是我如何建模数据存储的链接https://coryrylan.com/blog/angular-2-observable-data-services

我遇到的麻烦是更新可观察对象中的对象。

这里是商店

现在我的组件注入了这个服务

async然后我的模板使用管道消耗 observable

现在对于我感到困惑的部分。

单击按钮并flagMessage(message)调用方法时,它会设置msg.isNew, 并对服务器进行 http 调用。我看到is-new该类应用于<h2>,但随后它很快恢复为原始值。

我不想再次调用从服务器获取所有消息。这似乎效率低下。我在想 Observable 正在返回一个副本,但我不确定。

最近对我来说这是一个学习曲线。我已经在上个月开始使用 Angular2、Typescript2、Rxjs 和 Ionic2,因此感谢您的帮助。