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

Relaterade artiklar