2016-03-17 10 views

Antwort

7

Ja, das ist möglich. In der Tat ist der @Injectable Dekorator nicht anzugeben, dass eine Klasse in andere injizierbar ist, sondern dass Sie etwas auf der Ebene ihres Konstruktors einfügen wollen.

Wenn Sie etwas in Ihre Klasse nicht injizieren möchten, ist es nicht obligatorisch, den @Injectable Decorator hinzuzufügen. Diese Klasse kann in andere Klassen eingefügt werden.

Ich denke, dass diese Github Problem könnte Ihnen helfen:

Was wichtig ist, ist hier der Unterschied zwischen Dekorateure und Anmerkungen zu verstehen. Hier ist ein großer Artikel zu diesem Thema:

2

Ich denke, ja es ist möglich. Ich habe es ohne @Injectable Dekorateur getestet und es funktioniert gut.

plunker

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"; 
    }  
} 

Wenn Sie sich fragen, weil einige Klasse, Verwendung DI im Konstruktor und nicht @Injectable() verwenden. Weil dies z. B. @Components geschmückt ist.

Die HeroesComponent hat auch eine injected Abhängigkeit. Warum fügen wir der HeroesComponent nicht @Injectable() hinzu?

Wir können es hinzufügen, wenn wir wirklich wollen. Es ist nicht notwendig, da die HeroesComponent bereits mit @Component versehen ist. TypeScript generiert Metadaten für jede Klasse mit einem Dekorator, und jeder Dekorator wird tun.

Für weitere Informationen können Sie dieses link Angular page

+0

Oh danke für den Vorschlag. Aber jetzt, wenn jemand meine Antwort mag, würde deinen Kommentar auch sehen und in die richtige Richtung gehen :-) – micronyks

+0

Oh großer Mann! Warum bearbeitest du meine Antwort nicht und verlinke zu angular.io. Ich werde deine Bearbeitung akzeptieren :-). Ich bin in einer Arbeit, also kann ich es nicht sofort wie erwartet tun. :-) – micronyks

+0

kein Problem, aber sicherlich können Sie besser als ich, weil mein Englisch sehr schlecht ist, können Sie überprüfen und bearbeiten, wenn Sie nicht viel Glück mögen –

1

lesen Wenn die Klasse Abhängigkeiten Sie es noch in DI verwenden können.Geben Sie einfach eine Fabrik für sie

Wenn Sie eine Klasse in der Lage sein wollen, zu injizieren, die sich Abhängigkeiten (Konstruktorargumente) hat, wollen aber nicht oder nicht @Injectable() anwenden können, dann können Sie eine Fabrik anstelle

bootstrap(AppComponent, [ 
    SomeDep, 
    provide(SomeType, {useFactory: (dep) => new SomeType(dep), 
     deps: [SomeDep]}) 
]); 

Sie können Variablen für solche Anbieter erstellen, um sie leicht ohne diese umständliche Erklärung wiederverwendbar zu machen (wie zum Beispiel HTTP_PROVIDERS)

export const SOME_TYPE_PROVIDERS: any[] = [ 
    SomeDep, 
    provide(SomeType, {useFactory: (dep) => new SomeType(dep), 
     deps: [SomeDep]}) 
]; 

und dann verwenden, wie

bootstrap(AppComponent, [SOME_TYPE_PROVIDERS]); 
Verwandte Themen