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

javascript - 防止使用 Observable Angular 2 时插入重复项

我有一个问题,每次我提交帖子时,我的数组都呈指数级增长。我认为它发生在第二个 observable 中,因为在每个帖子之后都会更新用户对象,以更新他们上次更新帖子的时间戳。

我正在尝试检查内部 observable 是否该帖子已经在数组中,以防止将重复项插入到数组中。由于某种原因,这不起作用。

0 投票
2 回答
65 浏览

http - 在多个位置的 http 调用开始和结束时设置变量

我有一个 AngularJS 2 应用程序,我想运行一个 http 调用并在它开始和结束时设置一些变量。问题是我需要在不同的位置为同一个呼叫执行此操作。

当我调用 reload() 函数时,必须为同一个 http 调用同时设置 load() 和 reload() 的开始和结束变量。我怎样才能做到这一点?

0 投票
1 回答
46 浏览

javascript - Observables - 防止数组的 onCompleted

假设我有一个这样的数组:

我从这个数组中创建了一个 observable,如下所示:

我这样订阅:

我遇到的问题是,如果我像这样将新项目推送到数组中:

这些项目 (4,5,6) 不会出现在 subscribe() 回调中!

所以我的问题是,我们如何创建一个可以“保持打开”的可观察数组,以便将来如果项目被推送到数组上,观察者回调会触发?

我为此创建了一个要点:

https://gist.github.com/ORESoftware/677ad0a3adf41c04a60829921ba4c4c4

这是一个小提琴:

https://jsfiddle.net/mcq40Lmg/

0 投票
1 回答
230 浏览

angular - 来自服务的Angular2多播

我有一个更新我的数据库的服务我希望它更新我的祖父母和父组件。

我得到的行为是祖父组件正在从服务获取响应。如果我注释掉祖父母中的订阅代码,那么我会看到父行为。我想要的是每次更改 progressBar$ 的值时两个组件都做出响应

服务代码

祖父组件

父组件:

0 投票
1 回答
1402 浏览

javascript - Angular 2:可从多个事件或事件处理程序中观察到

我在组件模板中对多个输入及其事件进行了分组,如下所示:


现在我想从 中创建一个 Observable onSearchObjectChange(),它应该得到 Promise 的结果。我将如何做到这一点,或者有更好的方法来使用 Observable?我也可以使用distinctUntilChanged()对象的功能吗?

我试图用模板变量来解决它:

在 ViewChild 的帮助下:

但它不起作用...

0 投票
1 回答
278 浏览

angular - angular2 observable interval - Deal with out-of-order responses

I have a scenario where I need to call a service method(which will call HTTP post method) repetitively until I get the results and for that I am using interval. In below code the getReportResultsList(id) method will be get called in the interval of 100 ms.

The problem is, the server may take 300 ms time to process the first request and return the results. But at the same time 2 more requests are going to the server to get the results because of interval(100). So after getting the results from the first request i don't want to process the unexpected 2nd and 3rd requests response results.

So I don't want to process the 2nd and 3rd responses. Can any one know how to to deal with these out of order responses?

Thanks.

#xA;
0 投票
2 回答
3249 浏览

angular - Angular 2 和 Typescript 可观察函数参数 - 管道做什么?

最近我需要一个函数中使用 Observer 参数,我在我的桌子上敲了敲头,试图弄清楚如何在 Typescript 中做到这一点。您可能还记得delegate在 C# 中使用参数;这基本上就是我在这里想要做的。这是subscribe(observer: Observer<any>). 我这样做的原因是因为我试图为订阅添加 AOP 类型的书挡。那不是重要的部分。

基本上要让它工作,你必须|在你的函数参数后面添加一个字符,它最终是这样的:

(observer: Observer<any> | ((值:任何)=> 无效)): void

我的问题基本上是该函数签名中的粗体部分做了什么?我已经搜索了我能想到但无法弄清楚的所有资源。如果没有 之后的部分|,我收到了这个错误:

'(res: any) => void' 类型的参数不可分配给'Observer' 类型的参数。类型“(res:any)=> void”中缺少属性“next”。

一旦我添加了管道字符和之后的部分,我就能够以传统的观察者方式(使用箭头函数)毫无问题地订阅,并且我还确认所有订阅都有效(这排除了管道之后的部分是默认的价值)。任何想法都会受到赞赏,因为我讨厌看到一些有用的东西,但不知道为什么!

0 投票
2 回答
3285 浏览

angular - 在 Angular 2 AuthGuard 中添加对 canActivate 的 API 调用

我正在为 Angular 2 应用程序中的路由设置 AuthGuard。每条路线都有不同的用户组可以前往该路线。在前端,我只存储一个不记名令牌,所以当调用 canActivate 时,我想调用一个 API,发送我的令牌和路由,让 API 解析该用户是否有权访问该路由,如果他们有,返回真,否则返回假。在前端,我想使用该调用的结果来路由它们或将它们发送回登录屏幕。

这就是我试图做到这一点的方式:

订阅中的逻辑有效,因为我已经像这样测试过它(这基本上取自谷歌的 Angular 文档):

我知道我的第一个语句的问题是 canActivate 必须返回真或假,而我只在订阅中返回真或假。问题是我只想在路由身份验证发生后返回 true 或 false,这需要调用 API。我接近这一切都错了吗?我是否应该在登录时返回用户角色并将每个路由的角色存储在前端,这样我就可以在不打电话的情况下进行检查?还有其他方法可以解决我缺少的问题吗?

0 投票
1 回答
3414 浏览

typescript - 如何使用 observable 的输出来过滤另一个

所以我有两个 observables,一个返回当前类别,另一个返回产品。我希望根据类别过滤产品。

这是在 Angular 2 中,所以我真的希望我的 ng2-view 成为订阅者(通过异步管道)。

像这个简单的例子:

也许答案很简单,但它让我难以理解。

0 投票
2 回答
6949 浏览

unit-testing - Angular 2 单元测试可观察到的错误 (HTTP)

我正在尝试为我的 API 服务编写单元测试,但在捕获 HTTP 错误时遇到了一些麻烦。我正在关注本指南以及 Angular2 文档,因为该指南在某些次要领域(稍微)过时了。

除了服务抛出错误(由于错误 HTTP 状态代码)的单元测试之外,所有单元测试都会通过。我可以通过注销来判断这一点response.ok。从我读到的内容来看,这与单元测试没有异步执行有关,因此,不等待错误响应。但是,我不知道为什么会出现这种情况,因为我在该方法中使用了async()实用程序函数。beforeEach

API服务

错误单元测试

更新 1

当我检查第一个回调时, response.ok 未定义。这使我相信该setupConnections实用程序存在问题。

更新 2

如果我没有在 get 方法中捕获错误,而是在 map 中明确地这样做,那么仍然有同样的问题。

更新 3

经过一番讨论,这个问题提交