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

angular - 角度 2 中的 DI

我实际上正在研究角度 DI 容器,我需要一些信息。

其实看API,好像Injector类在工厂参数中接受了一个Binding列表,并解析得到一个ResolvedBinding列表。

注意:https ://angular.io/docs/js/latest/api/di/

我想知道系统如何管理 Binding 和 ResolvedBing 之间的转换,因为:

  • 绑定可以返回一个值
  • 绑定可以返回别名
  • 绑定可以返回一个类
  • 绑定可以返回工厂

ResolvedBinding 构造函数如下:

似乎可以在需要时返回一个工厂(和类,如果我们承认类是通过工厂创建的),但是如果我只需要返回一个值怎么办?fw 是否创建了一个专门返回值的工厂?

0 投票
2 回答
36420 浏览

angular - 如何将父组件注入子组件?

我正在尝试将父组件注入子组件。我认为这很简单——只需在子组件中指定/注入父组件constructor()

我收到以下错误:

例外:无法解析 ChildComponent(?) 的所有参数。确保它们都具有有效的类型或注释。

我错过了什么?

子组件:

应用组件:

普朗克

0 投票
1 回答
773 浏览

angular - Angular 2 支持异步注入吗?

假设我有这样的嵌套路由:

创建了两个组件,ProductComponent并且PartComponent.

在产品组件中,我这样做http.get('/api/products/' + productId)会返回产品对象。如果我可以设置注入器,以便 PartComponent 仅在产品可用并将产品传递给构造函数后才解析,我会非常好。可能吗?

如果没有,我有什么选择从 访问检索到的产品PartComponent

0 投票
4 回答
15088 浏览

javascript - 如何动态地将提供程序添加到 Injector?

每个组件都可以Provider使用其providersin 中的属性指定 new ComponentMetadata

有没有办法从constructor组件中动态指定提供者?

0 投票
2 回答
1032 浏览

angular - Angular 2:我们应该如何使用 ES6/ES7 处理依赖注入?

由于工作限制,我一直在 Angular 2 中开发一个自定义组件,因为我试图在使用 ES6/ES7 的同时学习绳索并进行切换。假设我定义了一个组件,如下所示:

我需要将其传递给另一个名为的组件,AccordionGroup但是当我按照此Stack Overflow Thread中的答案并尝试像使用构造函数一样进行注入时:

使用

在进行第一条评论中提到的更正后呈现我的组件。

使用以下任何一种渲染组件:

或者

甚至

但问题仍然存在,在我们可以在 ES7 中使用参数装饰器之前,哪种方法才是合适的方法。

顺便说一句,很多代码都来自这个特定的教程,它用 TypeScript 演示了所有 Angular 2 的东西,所以我只是用 Webpack 将它改编成我的 es6/es7 环境。将指令迁移到 Angular 2

0 投票
3 回答
5994 浏览

angular - 从 Angular2 中的自定义验证器访问服务

我需要从静态方法内部访问我的自定义 http 服务,例如:

在这种情况下如何访问服务?

0 投票
1 回答
1676 浏览

angular - 在 Angular 2 中注入动态指令/组件

我是 Angular 2 的新手,我想我会制作一个可扩展的主从流程来开始学习。

“主”部分正在工作,我可以轻松地插入我需要在引导应用程序时填充列表的特定服务。问题在于使“细节”部分可扩展。

基本上,主从模板在模板中有以下几行:

不,我可以只加载Detail指令并完成它,但我希望该指令/组件是可注入的,因此我可以插入我喜欢的任何详细指令/组件,而无需将其硬编码到“主细节”组件中。

为了实现这一点,我尝试了DynamicComponentLoader

而master-detail.component.ts的构造函数:

作为引导程序的一部分:

好消息是它有效,它会SomeSpecificDetailComponent在需要的地方加载并显示模板。

但现在我被困住了。打字稿在抱怨,我似乎无法访问通过传递的项目<detail [item]='masterItemActive'>,我不知道这种模式是否是为这个问题寻找解决方案的方法。

所以我的三个问题是:

DynamicComponentLoader解决这个问题的方法是什么?

因为我更喜欢provide()主从使用的指令。这似乎是最轻松的方法,但我不知道如何实现这一点。

我怎样才能进入item里面SomeSpecificDetailComponent

我试过了:

以及如何防止打字稿抱怨?

因为第一个参数dcl.loadAsRoot()需要是“类型”类型 - 它不是。

任何帮助将非常感激!

更新

我一直错误地Type用作接口,打字稿编译错误已通过使用BaseDetailComponent extends Type.

0 投票
2 回答
4023 浏览

angular - Angular 2自定义服务未注入指令

我有这样的 app.component 。

chartData.service.ts:

然后我尝试在chart.directive 中使用ChartDataService,它是app.component 的子组件。chart.directive.ts:

但是它通过文档失败了,每个组件都有一个注入器,它在组件级别范围内创建依赖项。如果没有任何适当的组件级提供程序,则使用父组件的提供程序。这适用于带有@Component()装饰器的类。添加providers: [ChartDataService]@Directive声明会有所帮助,但这意味着每个装饰器都会有单独的实例,ChartDataService这是不受欢迎的。

有任何想法吗?还是设计使然?

0 投票
2 回答
73 浏览

angular - 如何创建像 Angular1 服务一样的单例对象?

我想知道如何在 Angular2 中创建单例对象,它将在应用程序的整个生命周期中保存某些属性的值 - 这样我就可以在许多组件中使用它并注入它。

有任何想法吗?

谢谢

我的尝试是:

在这种情况下, getUsername() 有效,但 this._http 帖子无效 - 它会引发错误:

原始异常:TypeError:无法读取未定义原始堆栈跟踪的属性“帖子”:

0 投票
5 回答
19577 浏览

angular - 如何在Angular2中正确使用依赖注入(DI)?

我一直试图弄清楚(DI)依赖注入在Angular2中是如何工作的。每次尝试将服务/或类注入我的组件时,我都会遇到很多问题/问题。

从不同的谷歌文章中,我需要providers: []在组件配置中使用,或者有时我需要@Inject()在我的构造函数中使用或直接注入bootstrap(app, [service])?我也看过一些文章想让我把@injectabledecorator。

例如:要注入 Http,我只需要将import{Http}Http 放入 providers 中,但是对于 FormBuilder,我需要@Inject()在构造函数中使用。

什么时候使用什么有经验法则吗?您能否提供一些示例代码片段?谢谢 :-)