typescript - Angular2: Injicera en icke @Injectable-klass
angular: 2.0.0-beta.9
Är det möjligt att injicera en icke @Injectable klass i en komponent? Till exempel, denna klass skulle kunna komma från ett tredjepartsbibliotek.
Svar #1
Ja, det är möjligt. Faktum är att @Injectable-dekorationen inte är för att ange att en klass kan injiceras i andra, utan att du vill injicera något i den på nivån av dess konstruktor.
Om du inte vill injicera något i din klass är det inte obligatoriskt att lägga till @Injectable-dekorationen. Denna klass kan injiceras i andra.
Jag tror att detta Github-ärende kan hjälpa dig:
- https://github.com/angular/angular/issues/4404
Det som är viktigt här är att förstå skillnaden mellan dekoratörer och annotationer. Här är en utmärkt artikel om detta ämne:
- http://blog.thoughtram.io/angular/2015/05/03/the-difference-between-annotations-and-decorators.html
Svar #2
Jag tror ja, det är möjligt. Jag har testat det utan @Injectable dekoratorn och det fungerar bra.
plunka
AuthService.ts
import {Injectable} from 'angular2/core';
import {Http, Response,HTTP_PROVIDERS} from 'angular2/http';
import 'rxjs/Rx';
import {Observable} from 'rxjs/Observable';
export interface sharedObject{
firstName:string;
lastName:stirng;
}
export class AuthService{
user:sharedObject;
constructor()
{
console.log('AuthService started')
this.user={firstName:"micronyks",lastName:"shah"};
}
change() {
console.log('change to angular2');
this.user.firstName="micronyks1";
this.user.lastName="shah1";
}
}
Om du undrar, för vissa klasser, använd DI i konstruktorn och använd inte @Injectable(). För att denna dekorerade @, till exempel @Components.
HeroesComponent har också ett injicerat beroende. Varför lägger vi inte till @Injectable() till HeroesComponent?
Vi kan lägga till det om vi verkligen vill. Det är inte nödvändigt eftersom HeroesComponent redan är dekorerad med @Component. TypeScript genererar metadata för vilken klass som helst med en dekoratör, och vilken dekoratör som helst fungerar.
För mer information kan du läsa den här länken Angular-sidan
