问题标签 [angular2-injection]

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 投票
3 回答
4118 浏览

angular - angular 2 - 在 http 错误处理程序中注入服务

我有一个方法 handleError() 就像文档https://angular.io/docs/ts/latest/guide/server-communication.html#!#error-handling

我的问题是,尽管this.loginService已正确注入我的班级,但它是未定义的。它已在其他方法中使用,但在handleError中似乎不可用。

http-catch 调用该方法的方式可能是问题所在吗?如果是这样,我该如何解决?处理错误时我需要执行一些逻辑。

这是一个关于我如何将 handleError 方法设置为回调的示例(就像文档一样)

0 投票
3 回答
1536 浏览

angularjs - 在构造函数中未定义注入的服务

对于注释,我对 Angular 非常陌生(就此而言是 1 或 2)。

我正在尝试编写 Http 的“超级”层,以避免必须在任何地方放置相同的标头。

还有一个服务来告诉请求何时执行;它被注入到上面的类 HttpLoading 中。

我的引导程序中有很多东西,包括 HttpLoading、LoadingService 和 ConnectionBackend(对于最后一个,如果它不在这里,我会得到一个异常)。

问题是我第一次调用HttpLoading'spost方法(在另一个服务中)时,我在this._ls.isLoading, 因为this._ls是未定义的,所以我得到一个异常,我不知道为什么。

如果您需要更多信息,请告诉我。


编辑

LoadingService正确注入我的AppComponent(主要组件)。


潜在的解决方案

看来您的公共/私有参数必须放在列表的首位。我会让比我更熟练的人解释原因,不过......

0 投票
3 回答
723 浏览

angular - Angular2 在没有引导的情况下注入 Http

语境:

我有一个类将为我的 REST Api 形成 POST 请求,我们称之为requester。在我的应用程序中进行的每个 ajax 调用都将通过它发送。因此,我不想通过它提供 Http,bootstrap(foo, [HTTP_PROVIDERS]);这会使它成为全球性的,我需要将它注入到请求者

代码:

错误:

原始例外:没有 Http 的提供者!(请求者 -> Http)

0 投票
2 回答
970 浏览

angular - Angular2 - 如何将服务注入自定义异常处理程序

我有一个像这样的自定义异常处理程序,我试图在其中注入服务(ErrorReportingService)

我试图注入的服务看起来像这样

ErrorReportingService 在应用组件的提供者下注册。

我也尝试过像这样以不同的方式注入服务:

尝试运行应用程序时出现此错误:

0 投票
2 回答
1098 浏览

javascript - 在哪里将服务提供者放在 Angular 2 层次结构中,以便组件可以使用相同的服务实例相互通信?

相关问题:

Observable 没有收到 angular2 中的下一个值

angular2中没有服务错误的提供者,为什么我需要将它注入它的父组件?

在 angular2 中使用与其他组件的可观察对话,没有收到即将到来的价值

我有一个具有 setCurrentPlaylists 函数的 PagesService,该函数将从其他组件触发,它将接收 Playlists 类型的值,并将控制台记录该值,使用下一个函数传递给其他组件(我打算这样做)。

我的页面服务的整个代码是:

我的页面组件代码是:

当我触发 setCurrentPlaylists 函数时,播放列表没有传递给 pages 组件。我需要使用传递的值来更新页面组件的播放列表。

这是我触发 setCurrentPlaylsts 函数后的控制台输出。没有来自页面组件的消息。 在此处输入图像描述

任何建议表示赞赏!

我从此组件调用 setCurrentPlaylists 函数

这是我的组件树: 在此处输入图像描述

0 投票
1 回答
2530 浏览

unit-testing - Angular 2 rc5,使用注入的管道的单元测试问题

我正在使用 angular2 rc 5,我编写了一个从 json 获取值的自定义管道。自定义管道:literal.pipe.ts 看起来像:

消息服务.ts:

Bundle.json 的键值对为

我正在使用 liteServer 运行我的单元测试。我的unitTests.html:

literal.pipe.spec.ts 如下:

看起来我在规范文件的某个地方出错了,因为当我运行 npm test 并查看在浏览器中打开的 unitTests 时,我收到以下异常:

我应该改变什么才能使这项工作。

0 投票
3 回答
697 浏览

angular - Angular2:为什么要使用私有访问说明符来实例化构造函数中的提供者

为什么只使用私有访问说明符来实例化构造函数中的提供者?是否有任何特定原因仅使用私有访问说明符?

私人注射

公共注射

0 投票
3 回答
1685 浏览

angular - Angular2 RC6 HttpModule 手动注入

我正在将一个项目从 angular2 RC4 迁移到 RC6,并且我有一个自定义表单验证器,它需要Http. 在迁移之前,我将ReflectiveInjector与 一起使用HTTP_PROVIDERS,但在 RC6 中,这不再可能,因为HTTP_PROVIDERS已弃用,不再存在。这是验证器中的静态方法:

只是替换HTTP_PROVIDERS没有HttpModule用,我在 stackoverflow 上发现了一个类似的问题(NG2 RC5: HTTP_PROVIDERS is deprecated)关于测试,但唯一的答案是特定于测试的。

如果此自定义验证器有其他或更好的解决方案,我如何手动“注入”Http或使用 RC6,我也对此持开放态度。HttpModule

提前致谢。

更新:该checkVat方法是静态的,这就是为什么我必须使用 ReflectiveInjector 而不仅仅是通过构造函数注入它,就像其他地方一样。自定义验证器的使用方式如下:

UPDATE2:在 Günther Zöchbauer 的回答的帮助下,我将代码更改如下,使其在没有静态函数且无需手动注入的情况下工作:

验证者:

导出类 VatValidator {

}

在具有 FormControl 的组件中:

0 投票
6 回答
27344 浏览

angular - 测试 - 无法解析 (ClassName) 的所有参数

语境

我创建了一个ApiService类来处理我们的自定义 API 查询,同时使用我们自己的序列化器和其他功能。

ApiService的构造函数签名是:

  • MetaManager是一个处理 api 元数据的可注入服务。
  • ApiConnectorService是一项服务,Http用于添加我们的自定义标头和签名系统。
  • EventDispatcher基本上是 Symfony 的事件调度系统,在 typescript 中。

问题

当我测试时ApiService,我在以下位置进行初始化beforeEach

它工作正常。

然后我添加我的第二个规范文件,即 for ApiConnectorService,其中beforeEach

所有测试都因此错误而失败:

错误:无法解析 ApiService 的所有参数:(MetaManager、?、EventDispatcher)。

  • 如果我从加载的测试中删除api-connector-service.spec.ts(ApiConnectorService的规范文件),ApiService则测试将成功。
  • 如果我从加载的测试中删除api-service.spec.ts(ApiService的规范文件),ApiConnectorService则测试将成功。

为什么我有这个错误?我的两个文件之间的上下文似乎存在冲突,我不知道为什么以及如何解决这个问题。

0 投票
2 回答
5029 浏览

angular - 加载 CustomExceptionHandler 时,Angular 2 注入器找不到服务

当尝试将服务注入我的 CustomExceptionHandler 时,Angular 注入器找不到该服务。

错误:Uncaught Can't resolve all parameters for CustomExceptionHandler: (?).

设置:

自定义异常处理程序

应用程序模块