Угловой 2 впрыснуть комплекс услуг
У меня есть три службы и один компонент:
root.service
abstarct-child.service
extend-child.service
app.component
The root.service
вводит с помощью инъекции зависимостей abstarct-child.service
, например:
import {Injectable} from 'angular2/core';
import {AbstractChildService} from './abstarct-child.service';
@Injectable()
export class RootService {
constructor(private _abstractChildService: AbstractChildService) {}
UseChildServiceDoSomethingFunction(){}
}
abstarct-child.service
выглядит так:
import {Injectable} from 'angular2/core';
@Injectable()
export abstract class AbstractChildService {
abstract doSomething(): any ;
}
extend-child.service
выглядит так:
import {Injectable} from 'angular2/core';
import {AbstractChildService} from './abstarct-child.service';
@Injectable()
export class ExtendChildService extends AbstractChildService{
constructor(private _num: number) { super(); }
doSomething() : any { return true; }
}
The app.component
обеспечивает root.service
и extend-child.service
Как то abstract-child.service
вроде так:
import {Component} from 'angular2/core';
import {Input} from 'angular2/core';
import {provide} from 'angular2/core';
import {RootService} from './root.service';
import {AbstractChildService} from './abstarct-child.service';
import {ExtendChildService} from './extend-child.service';
@Component({
selector: 'app',
providers: [provide(AbstractChildService, { useClass: ExtendChildService, useValue: this.num})]
})
export class AppComponent {
@Input('given_Num') num: number;
}
Я хотел бы знать, как я могу ввести в extend-child.service
объект, в этом случай this.num
из app.component
?
Спасибо.
1 ответ:
Я еще не до конца понял, чего ты пытаешься добиться, но
provide(AbstractChildService, { useClass: ExtendChildService, useValue: this.num})
Не является допустимым поставщиком.
Вы не можете иметь
useClass
и ещеuseValue
параметр в одном провайдере, только по одному за раз.Вы также не можете использовать
this.
в поставщике в@Component()
декораторе. Когда декоратор оценивается, еще нет экземпляра компонента, на которыйthis.
мог бы ссылаться.Если вы хотите указать число, вы можете использовать строку или OpaqueToken
provide('MyNumber', {useValue: 10}),
И получить его инъекции
constructor(@Inject('MyNumber') private _num: number) { super(); }
Другой способ-использовать фабрику
provide(ExtendedChildService, {useFactory: () => { new ExtendedChildService(10)});
Но
this.
по-прежнему не может быть передан.