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

typescript - Angular 2服务未注入组件

我在 Angular2 (2.0.0-beta.0) 应用程序中定义了一项服务。是这样的:

我将它列在我的主应用程序文件的 bootstrap() 函数中,以便它通常可用于我的代码:

有时我无法在组件中使用该服务,即使我myService:MyService在组件constructor()功能中有类似的东西,如下所示:

在其他地方它工作正常。在它不起作用的地方,如果我尝试访问它,我会收到一条消息:

这基本上意味着服务没有被注入。

是什么导致它无法注入?

0 投票
1 回答
3372 浏览

angular - Angular:父子组件通信,@Host 和 forwardRef

我正在试验新发布的 Angular beta 0,希望有人可以为我澄清一些事情。

我有一个 AppComponent 作为我项目的主要框架。它的模板创建了一个导航栏,其项目在其 ngOnInit 时被读入 AppComponent 的公共变量(称为“项目”)。*ngfor 然后渲染项目。这工作正常。

AppComponent 模板的底部是一个 div,其中放置了一个路由器插座。根据用户选择的导航项触发路线并呈现不同的子组件。这也很好用。在其中一个子组件中,我需要引用父 AppComponent 中的变量“items”。我尝试了三种在其构造函数中将 AppComponent 传递给 SubComponent 的方法:

方法 1 在运行时失败,出现“无法解析子组件的所有参数”之类的错误,而方法 2 和 3 有效,但我不明白为什么。这会让人认为,调用 SubComponent 的构造函数时 AppComponent 是未定义的,这是不可能的,因为除非在 AppComponent 模板的 router-outlet 中渲染,否则 SubComponent 不能存在。但是前向参考确实有效。

我可以发布更多代码,但我认为我在这里遗漏了一些概念性的东西?

附带问题 - 我在以前的 alpha 版本中看到装饰器 @View 经常用于组件定义中,例如指定模板。在 Angular 网站上当前的所有示例中,我从未看到 @View 而只有 @Component 装饰器。@View 现在已经过时了吗?

0 投票
4 回答
31324 浏览

typescript - Angular 2 HTTP“无法解析‘AppService’的所有参数”

我尝试将 http 提供程序导入服务,但出现以下错误:

无法解析“AppService”(?) 的所有参数。确保所有参数都用 Inject 修饰或具有有效的类型注释,并且“AppService”用 Injectable 修饰。

以下是一些代码片段:

引导.ts

应用服务.ts

我正在尝试调用服务器上的控制器以最终将 JSON 文件加载到数据表中。非常简单的东西,但我加载 Http 模块的方式似乎是错误的。任何帮助都感激不尽。

0 投票
0 回答
75 浏览

dependency-injection - Angular2 有一种注入当前 Injector 而不创建子节点的方法

我正在寻找一种方法来操作当前组件注入器。我知道我可以使用:

构造函数(私有注入器:注入器){}

获取注入器,但没有公开的方法允许我将服务附加到当前注入器而不是创建子注入器。那么这是不可能的还是什么?

0 投票
2 回答
7336 浏览

angular - Angular 2 仅在应用初始化时调用服务

我想要完成的是每次应用程序初始化只调用一次外部 API。

我有一个简单的服务,

和两个组件,主要appComponent

以及与路线一起使用的另一个组件

服务已初始化,Angular 在AppComponent. 我也想使用XServicewith ,每当我尝试从(通过)SecondComponent再次调用服务时, Angular 都会命中外部 API。我想尽量减少外部影响。SecondComponent_service._service.callAnAPI()

如何获取AppComponenton 初始化所做的数据而不是再次调用服务SecondComponent

0 投票
2 回答
324 浏览

angular2-services - Angular2,注入内容

我正在这样做:

在模型.ts

然后在 AppComponent 中:

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

tnx

0 投票
1 回答
3104 浏览

angular - 注入类数组

我有一个 MetaManager 类:

此类需要Handler[]注册为处理程序。然后,当我得到一些元数据时,我会在我的处理程序数组中循环查看哪个可以处理我的元条目。

话虽如此,问题是我无法在 main.ts 中提供一个类数组作为配置,这是我尝试过的(以及没有用的):

@Provide('HANDLERS')使用字符串条目(在 MetaManager 中带有注释:

使用接口提供处理程序:

使用Handler[]类提供者:

我想提供一个类数组,因为MetaManager将来需要有多个处理程序,通知,错误等......

编辑:

使用多提供者给我一个No provider for Array! (ApiService -> MetaManager -> Array)错误:

元管理器.ts:

main.ts:

0 投票
1 回答
4111 浏览

angular - Angular 2:如何将简单类型注入您的服务

我有一个具有单个字符串参数的基本服务

如果我从构造函数中删除字符串参数,服务将很好地注入,但我似乎无法弄清楚如何获取一个简单的字符串来注入。

我已经定义了一个配置来存储应用程序设置

我为 MyService 定义了一个工厂

在我的引导中,我注册了提供者

在我的应用程序组件中,我尝试注入 myService

应用程序永远不会启动,我得到这个错误

0x800a139e - JavaScript 运行时错误:未捕获(在承诺中):没有字符串提供程序!(AppComponent -> MyService -> 字符串)

0 投票
5 回答
99953 浏览

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

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

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

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

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

0 投票
1 回答
2879 浏览

angular - 在 Angular 2 中使用 ComponentResolver 加载组件时注入不同的提供程序

我们可以在动态加载组件的同时注入不同的提供者吗?

我的组件

别的地方,

所以在上面的代码中,在解析的同时MyComponent,提供者MyComponentService也会被解析,我们可以根据一些开关来不同地解析它吗?