问题标签 [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.
angular - 角度 2 中的 DI
我实际上正在研究角度 DI 容器,我需要一些信息。
其实看API,好像Injector类在工厂参数中接受了一个Binding列表,并解析得到一个ResolvedBinding列表。
注意:https ://angular.io/docs/js/latest/api/di/
我想知道系统如何管理 Binding 和 ResolvedBing 之间的转换,因为:
- 绑定可以返回一个值
- 绑定可以返回别名
- 绑定可以返回一个类
- 绑定可以返回工厂
ResolvedBinding 构造函数如下:
似乎可以在需要时返回一个工厂(和类,如果我们承认类是通过工厂创建的),但是如果我只需要返回一个值怎么办?fw 是否创建了一个专门返回值的工厂?
angular - 如何将父组件注入子组件?
我正在尝试将父组件注入子组件。我认为这很简单——只需在子组件中指定/注入父组件constructor()
:
我收到以下错误:
例外:无法解析 ChildComponent(?) 的所有参数。确保它们都具有有效的类型或注释。
我错过了什么?
子组件:
应用组件:
angular - Angular 2 支持异步注入吗?
假设我有这样的嵌套路由:
创建了两个组件,ProductComponent
并且PartComponent
.
在产品组件中,我这样做http.get('/api/products/' + productId)
会返回产品对象。如果我可以设置注入器,以便 PartComponent 仅在产品可用并将产品传递给构造函数后才解析,我会非常好。可能吗?
如果没有,我有什么选择从 访问检索到的产品PartComponent
?
javascript - 如何动态地将提供程序添加到 Injector?
每个组件都可以Provider
使用其providers
in 中的属性指定 new ComponentMetadata
。
有没有办法从constructor
组件中动态指定提供者?
angular - Angular 2:我们应该如何使用 ES6/ES7 处理依赖注入?
由于工作限制,我一直在 Angular 2 中开发一个自定义组件,因为我试图在使用 ES6/ES7 的同时学习绳索并进行切换。假设我定义了一个组件,如下所示:
我需要将其传递给另一个名为的组件,AccordionGroup
但是当我按照此Stack Overflow Thread中的答案并尝试像使用构造函数一样进行注入时:
使用
在进行第一条评论中提到的更正后呈现我的组件。
使用以下任何一种渲染组件:
或者
甚至
但问题仍然存在,在我们可以在 ES7 中使用参数装饰器之前,哪种方法才是合适的方法。
顺便说一句,很多代码都来自这个特定的教程,它用 TypeScript 演示了所有 Angular 2 的东西,所以我只是用 Webpack 将它改编成我的 es6/es7 环境。将指令迁移到 Angular 2
angular - 从 Angular2 中的自定义验证器访问服务
我需要从静态方法内部访问我的自定义 http 服务,例如:
在这种情况下如何访问服务?
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
.
angular - Angular 2自定义服务未注入指令
我有这样的 app.component 。
chartData.service.ts:
然后我尝试在chart.directive 中使用ChartDataService,它是app.component 的子组件。chart.directive.ts:
但是它通过文档失败了,每个组件都有一个注入器,它在组件级别范围内创建依赖项。如果没有任何适当的组件级提供程序,则使用父组件的提供程序。这适用于带有@Component()
装饰器的类。添加providers: [ChartDataService]
到@Directive
声明会有所帮助,但这意味着每个装饰器都会有单独的实例,ChartDataService
这是不受欢迎的。
有任何想法吗?还是设计使然?
angular - 如何创建像 Angular1 服务一样的单例对象?
我想知道如何在 Angular2 中创建单例对象,它将在应用程序的整个生命周期中保存某些属性的值 - 这样我就可以在许多组件中使用它并注入它。
有任何想法吗?
谢谢
我的尝试是:
在这种情况下, getUsername() 有效,但 this._http 帖子无效 - 它会引发错误:
原始异常:TypeError:无法读取未定义原始堆栈跟踪的属性“帖子”:
angular - 如何在Angular2中正确使用依赖注入(DI)?
我一直试图弄清楚(DI)依赖注入在Angular2中是如何工作的。每次尝试将服务/或类注入我的组件时,我都会遇到很多问题/问题。
从不同的谷歌文章中,我需要providers: []
在组件配置中使用,或者有时我需要@Inject()
在我的构造函数中使用或直接注入bootstrap(app, [service])
?我也看过一些文章想让我把@injectable
decorator。
例如:要注入 Http,我只需要将import{Http}
Http 放入 providers 中,但是对于 FormBuilder,我需要@Inject()
在构造函数中使用。
什么时候使用什么有经验法则吗?您能否提供一些示例代码片段?谢谢 :-)