2016-05-19 6 views
4

Ich verstehe nicht Wann @Inject verwenden und wann @Injectable verwenden?Was ist der Unterschied zwischen @Inject und @Injectable in Angular 2 Typoskript

import {Component, Inject, provide} from '@angular/core'; 
    import {Hamburger} from '../services/hamburger'; 
    export class App { 
     bunType: string; 
     constructor(@Inject(Hamburger) h) { 
     this.bunType = h.bun.type; 
     } 
    } 

Und ..

import {Injectable} from '@angular/core'; 
    import {Bun} from './bun'; 
    @Injectable() 
    export class Hamburger { 
     constructor(public bun: Bun) { 
     } 
    } 

Antwort

4

Der @Injectable Dekorateur zielt darauf ab, einige Metadaten tatsächlich festgelegt, über die in den Konstruktor der zugehörigen Klasse zu injizieren Abhängigkeiten. Es ist ein Klassen-Dekorator, der keine Parameter benötigt. Ohne diese Dekorateur wird keine Abhängigkeit injiziert ...

@Injectable() 
export class SomeService { 
    constructor(private http:Http) { 
    } 
} 

Der @Inject Dekorateur auf der Ebene der Konstruktor Parameter verwendet werden müssen Metadaten in Bezug auf Elemente angeben, zu injizieren. Ohne es wird die Art der Parameter verwendet (obj:SomeType entspricht @Inject(SomeType) obj).

+0

Dank @Thierry aber können Sie mir erklären, warum wir @Injectable() verwenden Wir können direkt die Klasse dann exportieren, warum wir @Injectable() verwenden? –

+1

Wenn es Ihnen freisteht, den '@ Injectable' Dekorator nicht für eine exportierte Klasse zu verwenden. Es wird funktionieren, es sei denn, Sie möchten etwas injizieren ... Ohne den Decorator wird nichts in die entsprechende Instanz der exportierten Klasse injiziert. –

+0

Wenn ich eine Klasse exportiere und sie in ein Modul importiere und sie im Code-Konstruktor (Beispiel: Beispiel) verwende, dann wird es funktionieren. Ich teste das schon. Dann ist es ein Grund, @Injectable() vor dieser Klasse zu verwenden – Kiwi