问题标签 [angular2-di]

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

angular - Angular 2.0 DI 我可以依赖抽象吗?

0 投票
2 回答
324 浏览

angular2-services - Angular2,注入内容

我正在这样做:

在模型.ts

然后在 AppComponent 中:

但收到此错误:错误 TS2304:找不到名称“TEST”。有人可以指出我做错了什么。

tnx

0 投票
1 回答
183 浏览

angular - Angular2 - 当两种服务相互需要时

这是我的主要组件(根组​​件)。在这里,我声明了一些应该可以通过整个应用程序访问的服务。

而且 - 确保每个人都明白 - 我正在做:

WebSocketService 和 AuthenticationService 都用@Injectable(). 一切都很好,直到我发现这两种服务都需要彼此。AuthenticationService 需要 WebSocketService 与后端服务器通信,WebSocketService 需要 AuthenticationService 来检查用户是否登录等。

结果,我收到了该错误消息:

例外:无法解析“AuthenticationService”的所有参数(未定义)。确保所有参数都用 Inject 修饰或具有有效的类型注释,并且 'AuthenticationService' 用 Injectable 修饰。

这是AuthenticationService的片段。WebSocketService 看起来很相似。

我知道,对于这种情况(第三次服务等)有不同的甚至更好的解决方案,但这不是我的问题的重点。我想知道是否有一种方法可以使用 Angular2 以我提出的类似方式将两个服务相互注入?

0 投票
3 回答
18421 浏览

angular - Angular 2 Di 不工作 - 无法解析所有参数

我创建了一个运行良好的简单 Hello World 应用程序。但是当我想添加一个“服务”只是一个简单的 Di 时,我得到了以下错误:

angular2.dev.js:23877 例外:无法解析“AppComponent”(?)的所有参数。确保所有参数都用 Inject 修饰或具有有效的类型注释,并且“AppComponent”用 Injectable 修饰。

angular2-polyfills.js:469 未处理的承诺拒绝:无法解析“AppComponent”(?)的所有参数。确保所有参数都用 Inject 修饰或具有有效的类型注释,并且“AppComponent”用 Injectable 修饰。; 区域:角度;任务:Promise.then;价值:

我有 3 个文件

引导.ts:

mainApp.ts:

course.service.ts:

当我从构造函数中删除 then 参数时,一切正常。

那是我的 HTML 文档的开头,我使用 angular 2 beta 13:

更新这些现在是我的固定 csproj TypeScript 设置

在最新的 VS 2015 更新中,您还可以使用 tsconfig.json,然后忽略 TypeScript 的解决方案设置。我当前的 tsconfig.json 示例:

0 投票
1 回答
261 浏览

angular - angular 2 (2.0.0-rc1) 如何在代码上创建子注入器

我需要使用创建的新注入器调用以下代码以动态添加提供程序:

我在互联网上找不到有关如何创建其父级是组件注入器的子注入器的示例。有任何想法吗?

我试图将一个ReflectiveInjector(所以我可以调用resolveAndCreateChild方法)注入到可能的组件中,但是在运行时引发了一个异常,说该类没有提供者。

0 投票
5 回答
99953 浏览

angular - 在没有构造函数注入的情况下获取服务实例

@Injectable在引导程序中定义了一个服务。我想在不使用构造函数注入的情况下获取服务实例。我尝试使用ReflectiveInjector.resolveAndCreate,但这似乎创建了一个新实例。

我试图做的原因是我有一个由许多组件派生的基本组件。现在我需要访问一个服务,但我不想将它添加到ctor,因为我不想在所有衍生组件上注入服务。

TLDR:我需要一个ServiceLocator.GetInstance<T>()

更新:更新了 RC5+ 的代码:存储注入器实例以在组件中使用

0 投票
1 回答
771 浏览

dependency-injection - 在 angular2 中注入单例服务

我有一个在组件和其他服务之间共享数据的服务。我用 Angular 的 DI 将它注入到组件和服务中。该服务将一些数据存储在其属性中(非静态)。我还使用 ComponentResolver 来动态创建和加载组件,然后销毁它们。问题是......如果我简单地在组件中注入这样的服务:

每次注入此服务器的一个新实例,数据就会丢失。我可以静态存储数据,但是有订阅这些数据的观察者。长话短说 - 太多东西要重构为静态变量。是否有某种方法可以告诉 Angular 的 DI 只创建该服务的一个实例并在每次注入时共享它?

0 投票
1 回答
66 浏览

angular - angular2 DI 中的胶水过多还是有其他方法?

在 Angular 1.x 中,服务是通过指定其注册名称来注入的。例如使用 TypeScript:

请注意,控制器实现不以任何方式引用文件或实现服务的类

但在角度 2 中,要完成类似的 DI,您必须执行以下操作:

请注意,在上面的第二个导入中,我必须指定 AppointmentServices 实现的位置以及代表组件和服务实现之间的粘合的类的名称

angular2 有没有办法在不指定类和实现它的文件的情况下注入服务?

如果必须以这种方式完成 DI,我认为这种 angular2 方法在其前身中完成的 IoC 方面是一种倒退!

0 投票
2 回答
52 浏览

angular - Angular 2 DI 未定义类

目前我正在尝试将某种设置类注入应用程序。

这是我的设置类...

我接下来尝试做的是通过整个应用程序注入(因为设置将被大量使用)。为此,我认为最好的方法是使用 bootstrap() 函数。所以这是我的引导功能:

我确实将它插入到我想使用 apiUrl 设置的服务的构造函数中:

但是由于某种原因,在运行应用程序时,我在 UserService 中遇到错误,说构造函数的第一个参数(_settings)未定义..

我一直在尝试不同的事情,但还没有找到可行的解决方案..

0 投票
1 回答
297 浏览

angular - Angular2 rc3:在构造函数中注入服务时出错(无法解析参数的类型)

我的 AuthGuard 类中有这个构造函数:

当我构建它时很好,但是通过浏览器访问时出现以下错误:

我不明白为什么它只发生在第一个服务而不是第二个。我认为这是继承的问题,因为第一个服务正在扩展 BaseService 但后来我也让第二个服务扩展了 BaseService 并且它可以工作,有问题的只是第一个......

注意我也尝试为每个参数添加 @Inject 装饰器,但结果是一样的。

先谢谢了!!