Winkel: 2.0.0-beta.9Angular2: Injizieren eines nicht @Injectable Klasse
Ist es möglich, eine nicht @Injectable
Klasse in eine component
zu injizieren? Zum Beispiel könnte diese Klasse aus einer Third-Party-Bibliothek stammen.
Winkel: 2.0.0-beta.9Angular2: Injizieren eines nicht @Injectable Klasse
Ist es möglich, eine nicht @Injectable
Klasse in eine component
zu injizieren? Zum Beispiel könnte diese Klasse aus einer Third-Party-Bibliothek stammen.
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:
Ich denke, ja es ist möglich. Ich habe es ohne @Injectable
Dekorateur getestet und es funktioniert gut.
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
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]);
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
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
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 –