arj*_*soh 10 dependency-injection typescript angular
我需要将一个服务注入到Angular 2应用程序中的另一个服务中.在阅读了我推断的文档之后,最好的方法是使用Factory Provider.但是出现了两个问题:
1)文档建议创建一个HeroServiceProvider包含两个"代码段"的类:
let heroServiceFactory = (logger: Logger, userService: UserService) => {
return new HeroService(logger, userService.user.isAuthorized);
};
export let heroServiceProvider =
{ provide: HeroService,
useFactory: heroServiceFactory,
deps: [Logger, UserService]
};
Run Code Online (Sandbox Code Playgroud)
我的问题是这个班级应该怎么样?应该在哪里添加上述代码段?
2)如何/可以使用这家工厂?我明白了,它应该导入为:
import { heroServiceProvider } from './hero.service.provider';
@Component({
selector: 'my-selector',
template: `
`,
providers: [heroServiceProvider]
})
Run Code Online (Sandbox Code Playgroud)
那么如何才能检索和访问所需的参数化服务?
Raj*_*amy 16
我在app_initalizer上注入了相同的问题,经过长时间的搜索,我找到了下面的解决方案.可能这对您的方案有帮助.
@NgModule({
imports: [ BrowserModule],
...
providers: [
{
provide: HeroService,
useFactory: heroServiceFactory,
deps: [Logger, UserService],
multi: true
}
]
})
export class AppModule {}
export function heroServiceFactory = (logger: Logger, userService: UserService) => {
return new HeroService(logger, userService.user.isAuthorized);
};
Run Code Online (Sandbox Code Playgroud)
小智 0
今天我遇到了同样的问题并找到了一些解决方案。
1)我在 angular.io 中找到了确切的代码,请参阅以下内容:
https://github.com/angular/angular.io/blob/master/public/docs/_examples/dependency-injection/ts/src/app/heroes /hero.service.provider.ts (链接于 2017 年 3 月 15 日更新)。
从这段代码来看,heroServiceProvider 不需要是一个类。
2)在app.module.ts中,@NgModule中有providers属性。您可以在其中添加 HeroServiceProvider,如下所示:
import { heroServiceProvider } from './hero.service.provider';
...
@NgModule({
...
providers: [
heroServiceProvider
],
bootstrap: [ AppComponent ]
})
Run Code Online (Sandbox Code Playgroud)
通过像这样在 @NgModule 中提供服务,您可以在应用程序范围内使用该服务。
| 归档时间: |
|
| 查看次数: |
30801 次 |
| 最近记录: |