Angular 2 注入了全局依赖关系
Angular 2 injecting a global dependency
我想做的是让每个组件都可用的服务,但我不希望将其导入到所有组件中。(显然,如果我必须这样做,我会的。
我想,也许是错误的,我可以做一些类似于我在应用程序中引导HTTP_PROVIDERS的事情,使其可用于 HTTP(如果我没记错的话,这是必需的(。
例如,在我的 app.ts 文件中:
import { bootstrap } from 'angular2/platform/browser';
import { Injectable } from 'angular2/core';
import { HTTP_PROVIDERS } from 'angular2/http';
import 'rxjs/add/operator/map';
import { WidgetService } from './widget.service';
import { BuilderComponent } from './modules/builder/builder.component';
bootstrap(BuilderComponent, [HTTP_PROVIDERS, WidgetService]);
我希望这将使WidgetService在所有子/孙子等组件中可用。(BuilderComponent是有多个孩子/孙子的父母。
我在使用@Inject注入它时遇到的错误,并且@Injectable未在服务本身中使用:
未捕获的引用错误:未定义窗口组件服务
在服务中使用@Injectable而不使用@Inject注入服务时出现的错误:
无法解析"MyComponent"(NonGlobalService, ?(的所有参数。确保所有参数都使用 Inject 修饰或具有有效的类型注释,并且"MyComponent"使用 Injectable 装饰。
我不确定为什么MyComponent需要用Injectable装饰,但是当我用@Injectable装饰它时,我遇到了同样的错误。
widget.service.ts
import { Injectable, NgZone } from 'angular2/core';
@Injectable()
class WidgetService {
constructor(private _zone: NgZone) {
}
// other methods here...
}
export { WidgetService };
以及我如何尝试注入它:
class MyComponent {
constructor(private _nonGlobalService: NonGlobalService,
private _widget: WidgetService) {
}
}
总结一下:
- 是否可以将服务全局注入所有组件,而无需手动将其导入每个组件。(IE:如果我想要,可以在任何地方使用它。
- 如果可以,有人可以解释我做错了什么,并告诉我如何正确地做。
- 感谢您的时间和答案!
有不同的方法。
您可以创建一个包装服务,并且只注入这个包装服务。
@Injectable()
export class FooService {
doFoo() {...};
}
@Injectable()
export class BarService {
doBar() {...}
}
@Injectable()
export class GlobalService {
constructor(public foo:FooService, public bar:BarService) {
}
}
这里需要导入GlobalService
export class MyComponent {
constructor(global:GlobalService) {
global.foo.doFoo();
global.bar.doBar();
}
}
这样,您无需为组件导入任何内容
bootstrap(AppComponent, [
provide('foo', { useClass: FooService }),
provide('bar', { useClass: BarService })]);
export class MyComponent {
constructor(@Inject('foo') foo, @Inject('bar') bar) {
foo.doFoo();
bar.doBar();
}
}
但我不认为第二种方法是可取的。您不会获得任何 IDE 支持,因为服务的类型在 MyComponent
中是未知的。
相关文章:
- 单元测试依赖关系没有被嘲笑
- FRP 中 EventStreams 的循环依赖关系
- 节点模块依赖关系
- 在Meteor中使用具有依赖关系的NPM包
- requirejs定义:嵌套依赖关系
- Django管道和javascript依赖关系
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- Npm未满足对等依赖关系
- Node.JS处理重复的可传递依赖关系
- 在Firefox上使用聚合物的javascript依赖关系的HTML导入困难;Safari
- 库中的匿名定义()模块's的依赖关系导致库损坏'的家属
- 使用Require.js按照依赖关系的顺序加载JavaScript
- GraphQL代码中的Javascript循环依赖关系
- 使用 grunt 检查单个 javascript 文件时如何解决依赖关系
- 与超类的依赖关系
- 在 Angular JS 业力测试中管理依赖关系
- 在 webpack 中管理 jQuery 插件依赖关系
- requirejs+bower,bower组件中的路径和依赖关系
- 预构建的NPM包:如何为用户省去依赖关系
- 聚合物种子-自定义元素依赖关系