问题标签 [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 - Angular——在哪里提供服务?
如果我想在一个模块中隔离服务,我应该为模块创建一个根组件,并providers
在这个组件上使用(如所述文档)。
如果我providers
在模块上使用,服务将成为应用程序级别。因此,这是提供应用程序级服务的一种方式(如示例中所做的那样)。
但是,接下来,文档说:
不要在共享模块中指定应用程序范围的单例提供程序。导入该共享模块的延迟加载模块将制作自己的服务副本。
所以,我们不应该使用providers
模块来提供共享服务。那么,我们应该使用什么?应用模块providers
?我们应该在 AppModule 中提供所有共享服务吗?什么时候应该使用providers
功能模块?
看起来,模块提供程序是共享的,但您不应该将它们用作共享。怎么回事?
angular - 如果像这样使用 `private fb: FormBuilder`,为什么 `FormBuilder` 的 DI 会失败
我正在尝试将这样的FormBuilder
类注入组件:
但是,它失败了,我得到了错误:
(SystemJS)无法解析任务组件的所有参数:(?)。↵错误:无法解析任务组件的所有参数:(?)。
如果我将构造函数更改为这种形式:
它工作正常。有什么问题?
angular - 如何单独使用角度DI
这篇文章指出:
现有的 DI (angular1) 有一些问题:
内置到框架中——Angular 1 的 DI 直接嵌入到框架中。我们没有办法将它解耦为一个独立的系统。
如何将 angular2 DI 用作独立系统?据我了解,它没有作为单独的包发布。
javascript - @Host 装饰器如何在注入器树中工作
我试图了解@Host
装饰器如何与view-components 分离。所以我创建了以下注入器树:
我预计会出现错误,因为据我了解grandchild
注入器的主机是child
,并且注入器中没有Dependency
提供child
。但是,当我运行此代码时,我会'A'
从根注入器中注入。为什么?
angular - 通过 DI 启用自定义的模式
我正在查看in-memory-web-api的实现,并且有以下代码:
据我了解,模式如下:
- 定义类属性并在不使用 DI 的情况下实例化依赖项
- 可选地注入依赖项
如果用户通过 DI 提供修改后的依赖项,它将被注入,并且没有 DI 实例化的默认依赖项将被覆盖。我怀疑模块RequestOptions
中可能有类似的东西。HTTP
这是一种常见的模式吗?
编辑:
事实证明,这in-memory-web-api
并不完全是我要问的模式。假设,我有一个类A
使用B
可注入的类实例和 token B
。所以他们都注册了根注入器:
提供者:[A,B]
现在,如果用户想要自定义B
,他可以在同一个令牌下注册自定义版本,从而有效地覆盖原来的B
:
这是如何RequestOptions
在http
模块中扩展的。
angular - Angular2作为组件输入的传递函数不起作用
我有一个将函数作为输入的组件。我已经从父级传递了这个函数。
尽管调用了该函数,但该函数无法访问声明该函数的实例的依赖关系。
这是组件
这是组件的使用方式
当我运行这个应用程序时,我在控制台中收到一条错误消息Cannot read property 'getVal' of undefined
这是这个问题的一个小问题。
angular - 对使用 Injector 和 Router(和其他服务)的父类进行单元测试
假设我有一个类Foo
为其所有派生类提供依赖注入服务,例如:
它具有从它派生的类:
如何正确地对父类进行单元测试,而不会遇到:
Error: Can't resolve all parameters for Foo: (?)
此刻我有(尝试了很多很多不同的方法来让它工作,但是失败了:()
我也尝试过ReflectiveInjector.resolveAndCreate
这样使用:
但仍然没有骰子:(有什么想法吗?
angular - 角。使用 APP_INITIALIZER 时路由器 DI 不工作
我正在通过APP_INITIALIZER
以下方式从服务器预加载应用程序配置AppModule
:
然后,ApiService
手动注入ConfigService
:
注入时finallyrouter
是未定义的ApiService
这是plunker
有什么想法可以解决/解决它吗?
angular - Angular 2 将服务注入服务
在我的应用程序中,我使用我们自己的实现扩展了 Angular Http 类,该实现添加了一些标头。
然后,在 app.mobule.ts 文件中,我已经这样做了,所以每次都使用我们的安全版本而不是基本版本:
现在,在我们的服务中,我们使用标准的构造函数/DI 方法:
现在我的问题是,SecurityService 还需要注入 Secure_Http 类/服务,因为那里需要一个函数来获取 JWT。
但是,一旦我将 Secure_Http 类/服务添加为构造函数参数,我就会收到错误消息No provider for Secure_Http
。
因此,我的下一个想法是将 Secure_Http 添加到 app.module.ts 文件中的 providers 部分,就在我指定 Http 需要使用 Secure_Http 的位置旁边。但是一旦我这样做,我就会得到错误No provider for ConnectionBackend
。如果我转身添加ConnectionBackend
到提供程序中,那么@NgModule 上就会出现错误Type 'typeof ConnectionBackend' is not assignable to type provider
。
我在哪里错了?我只有一种方法需要直接访问 Secure_Http 类。这是必需的,因为它需要成为我的一个帖子调用的参数。我不能只从 Secure_Http 服务/类中调用它,因为参数已经传递......