问题标签 [angular2-services]

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 投票
5 回答
33536 浏览

angular - Angular2全球服务商

在我的 Angular2 应用程序中,我有一个简单的需求,我想根据登录成功显示隐藏菜单栏。为此,我创建了一个服务,它只有一个 LoginSuccess 布尔变量,我将在登录组件上设置它并将在 app.component.html 上用于[hidden]=LoginSuccess导航标记。

我面临的问题是,即使在app.global.service.ts通过constructor值注入app.component.ts & login.component.ts并没有持续存在并且每个构造函数都创建app.global.service.ts.

问题:如何通过服务在应用程序中保持单一价值。在 Angular2 文档的某个地方,我确实读过 Injectable 服务是单例的。

0 投票
2 回答
505 浏览

dependency-injection - 基本组件中的 Angular 2 DI

假设我有一个基本组件 -

还有一个派生组件 -

但我只需要 BaseComponent 中的 myService 依赖项。有什么方法可以避免向 DerivedComponent 添加额外的构造函数?

从 DerivedComponent 中删除依赖项似乎会导致它不被注入。

0 投票
1 回答
187 浏览

angular - 如何根据两个不同的 Async 方法结果设置结果

在我的数据服务中,我有:

我的组件有:

我遇到的问题是如何在组件中设置 currentTicketType?它取决于已加载的 currentTicketSurvey 和已加载的票证类型。这些可能会或可能不会在我的代码的其他区域一起调用,并且由于它们是异步调用,我不能在我在服务上调用它们之后立即设置它。在淘汰赛中,我想我可以设置一个计算出的 observable 并完成它。我找不到 Angular 2 的等价物。关于如何处理这种情况以在加载其他对象后设置 currentTicketType 的任何想法?

当然它经常出现。我见过的例子相似但不一样说使用 defer 和 concatAll 但看起来它会假设这些方法总是以相同的顺序或同时调用。我只是还没能拼凑出我正在寻找的东西。

0 投票
1 回答
1056 浏览

events - Angular2事件订阅没有触发?

我有一个具有以下结构(三个组件)的系统:

还有一个服务:Service上面有一个 EventEmitter。

在所有三个组件上,我将服务设置为提供者,将其添加到构造函数并订阅事件发射器:

问题是,它只在从触发事件的服务调用方法的组件上被触发。我的猜测是,通过以这种方式定义它们,每个组件都会获得不同的Service而不是相同的,因此该事件仅由调用触发方法的组件看到。

为了让所有三个组件能够订阅相同的服务并实际捕获事件,我应该进行什么设计?

0 投票
2 回答
9758 浏览

angular - http 提供者 Observable.toPromise() 在承诺链中没有按预期工作

如果我使用 ng2 http 提供程序 Observable.toPromise() 支持调用启用承诺的方法,它会按预期工作,但是当我将它用作承诺链的一部分时,它会在 then 处理程序处理并返回结果之前解析返回的承诺。

让 Observable.toPromise() 在承诺链中工作或我可能测试以使其成为承诺链兼容结果的替代方式的任何已知问题?在 http 请求(promise 链中的最后一项)完成其异步请求并返回结果之前,我被这个解决承诺阻止了。

例如

提前感谢您的任何见解或建议。

0 投票
1 回答
279 浏览

dependency-injection - Angular2 与来自服务的数据的数据绑定

我有这个组件

和这个其他组件

,这项服务:

这个模板:

目的是:管理组件(用户单击某个按钮)-> Listener OnClick 调用服务 roomService 上的方法-> roomService 发出事件(即公共)-> appComponent 监听此事件(.subscribe)

我不知道为什么这不起作用。<h3>即使console.log(room)在控制台中显示一些东西,它也永远不会显示......

这个数据绑定是如何工作的?因为看起来数据不是双向绑定的 ......

编辑:我理解这个问题,它与我所做的路由有关。事实上,我不明白当你改变路线时,路线的组成部分被破坏了

0 投票
2 回答
967 浏览

angularjs - Angularjs 一组件多视图(Html+css)

我需要弄清楚如何为组件提供不同的视图(html+css)。很多人说最好为每个视图有多个组件,然后使用服务进行交互,但我的情况如下:我有一个控制器,其视图基本上是一个布局。假设我的布局顶部有 3 个窗格,底部有一个窗格。现在我的视图中有按钮,可以将布局更改为顶部的两个窗格和底部的两个窗格。所以基本上我的数据没有改变。它只是对 html 和 css 的更改。此外,如果第一个布局填充了一些数据,我不想在更改布局时更改或重新初始化它,因为更改只是对布局的更改,而不是数据。

我很难弄清楚如何在 angular2 中实现这一点。有任何想法吗?

0 投票
1 回答
1285 浏览

angular - Angular2 TypeScript 2 方法,一个变量不返回值

我有一个DropdownProjectService用对象调用的服务selectedProjects: Object = new Array();

我有 2 个功能,一个用于添加数据selectedProjects,一个用于检索数据。

下拉项目.service.ts

我已经在这两个函数中记录了变量。在addProjects函数selectedProjects中显示对象,但在getProjects()方法中,selectedProjects是并且仍然是一个空数组。我想知道为什么会这样以及可以做些什么。如果我需要发布更多代码,我会,但现在我不知道要显示哪个代码。

应用程序.ts:

下拉项目.ts

这些组件和服务一团糟。我打算清理所有不使用的东西。我不喜欢草率的代码,但仍然无法帮助创建它...

0 投票
1 回答
264 浏览

angular - 在多个自举组件之间共享服务

我创建了 2 个单独的组件(在 2 个不同的视图中),并且我尝试在这 2 个组件之间共享一个独特的服务(单例)。该服务用于操作这些组件之一。我的服务:

第一个组件:

还有我的第二个组件,它与第一个组件分开:

但是 ModalContainerService 不再包含我的第一个组件的引用......是否可以在单独提升的 2 个组件之间共享数据/服务?

0 投票
3 回答
274389 浏览

typescript - Angular2:如何在渲染组件之前加载数据?

我试图在组件被渲染之前从我的 API 加载一个事件。目前我正在使用我从组件的 ngOnInit 函数调用的 API 服务。

我的EventRegister组件:

我的EventRegister模板

我的 API 服务

ngOnInit组件在函数中的 API 调用完成获取数据之前被渲染。所以我永远无法在我的视图模板中看到事件 ID。所以看起来这是一个 ASYNC 问题。ev我希望(组件)的绑定在设置属性EventRegister后做一些工作。可悲的是,当属性设置时,ev它没有显示div标记。*ngIf="ev"

问题:我是否使用了一个好的方法?如果不; 在组件开始渲染之前加载数据的最佳方式是什么?

注意:此angular2 教程ngOnInit中使用了该方法。

编辑:

两种可能的解决方案。首先是放弃fetchEvent并只在函数中使用 API 服务ngOnInit

第二种解决方案。就像给出的答案一样。