Te doy la bienvenida a nuestra página web, aquí vas a hallar la resolución que necesitas.
Solución:
Entonces, después de un buen trabajo de CH Buckingham, resolví que hacerlo de la manera “típica” es imposible.
Angular2 simplemente asume la función constructor () con el inyector. Sin embargo, lo que sí funciona es crear una función “init” alternativa a la que luego pueda pasar parámetros.
@Injectable()
export class ParentService
root:string = "This content comes from: ";
myString:string = "The Parent";
resultString:string;
constructor()
this.init();
init()
this.resultString = this.root + this.myString;
@Injectable()
export class ChildService extends ParentService
constructor()
super();
init()
this.myString = "The Child";
super.init();
De esta manera, puede establecer valores en el objeto secundario o pasarlos al padre.
Plunker de esto en acción
Aquí hay otra forma de extender un servicio en angular2 que funciona con la DI. El servicio secundario no puede utilizar el mismo nombre de parámetro para los servicios inyectables utilizados por el padre, de ahí el motivo de otro nombre de parámetro HTTP.
El servicio para padres:
@Injectable()
export class GenericStore
....
constructor(public config:GenericConfig,private http:Http)
....
....
El servicio infantil:
const DEFAULT_CONFIG:GenericConfig = ... ;
@Injectable()
export class ConfigStore extends GenericStore
....
constructor(private anotherHttp:Http)
super(DEFAULT_CONFIG,anotherHttp);
....
Actualización: si desea utilizar la interfaz de servicio estándar sin instanciación manual y pasar valores simples al constructor, entonces los documentos recomiendan configurar una fábrica, que requiere una cantidad casi tonta de código: Inyección de dependencia (desplácese hacia abajo hasta Proveedores de fábrica).
//this is all Google Example Code
constructor(private logger: Logger, private useCoolFeature: boolean)
let heroServiceFactory = (logger: Logger, userService: UserService) =>
return new HeroService(logger, userService.user.isSpecial);
let heroServiceDefinition =
useFactory: heroServiceFactory,
deps: [Logger, UserService]
;
let heroServiceProvider = provide(HeroService, heroServiceDefinition);
bootstrap(AppComponent, [heroServiceProvider, Logger, UserService]);
Este código a continuación funciona correctamente, pero no usa el sistema del proveedor para los servicios:
//things.service.ts
@Injectable()
export class ThingService
public myString: string = "base";
constructor(str: string)
this.myString = str;
@Injectable()
export class Thing2Service extends ThingService
constructor()
super('I AM CHILD');
//app.component.ts
public thingService: ThingService = new ThingService("I AM PARENT");
public thing2Service: Thing2Service = new Thing2Service();
ThingService.myString === "I AM PARENT"; //true
Thing2Service.myString === "I AM CHILD"; //true
Puedes estimular nuestro cometido dejando un comentario o dejando una valoración te estamos eternamente agradecidos.