我通常可以将任何提供程序注入到我的组件中,但这仅限于组件吗?有没有办法将ActivatedRoute
注入到在此上下文中使用的常规类中:
app.module.ts
@NgModule({
...
providers: [
AuthenticatedRequestOptions,
{ provide: RequestOptions, useClass: AuthenticatedRequestOptions }
],
...
})
认证请求-options.model.ts
@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {
constructor(@Inject(ActivatedRoute) public route: ActivatedRoute) {
super();
console.log('route', this.route);
}
}
答案 0 :(得分:1)
只需将其作为参数添加到构造函数
即可constructor(route: ActivatedRoute, private injector: Injector) {}
AuthenticatedRequestOptions
需要在某个@Component()
,@NgModule()
,......提供,并且该类需要@Injectable()
装饰器
@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {
这个班需要自己注入
如果使用new AuthenticatedRequestOptions(...)
Angulars创建实例,则不涉及DI,您需要自己传递参数。
答案 1 :(得分:1)
@Inject
允许将依赖项注入提供者,即使它们没有@Injectable
装饰器,正确的语法是:
export class AuthenticatedRequestOptions extends BaseRequestOptions {
constructor(@Inject(ActivatedRoute) private route: ActivatedRoute) {
...
为了让提供者类为DI使用类型注释,它应该有@Injectable
装饰器:
@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {
constructor(private route: ActivatedRoute) {
...