2017-05-22 1 views
1

Ich habe einen einfachen Dienst in AngularWann ist @Inject in Angular optional?

// service.ts 
export class SimpleService { 
    // ... 
} 

// component.ts 
@Component({ 
    selector: 'my-component', 
    templateUrl: 'components/mycomp/mycomp.html', 
    providers: [ 
     SimpleService 
    ] 
}) 
class MyComponent { 
    constructor(private ss: SimpleService) {} 
} 

Das obige Code funktioniert nie. Ich erhalte eine Fehlermeldung: Uncaught Error: Can't resolve all parameters for MyComponent: (?).

Allerdings, wenn ich an meine Konstruktordefinition ändern:

class MyComponent { 
    constructor(@Inject(SimpleService) private ss: SimpleService) {} 
} 

Dann funktioniert es. Auch die Dokumentation scheint @Inject nicht zu verwenden. Aus der Dokumentation verstehe ich, dass @Inject explizit erforderlich ist, wenn mein Provider-Token keine Klasse ist; wie, versuchen, primitive Werte zu injizieren, oder undurchsichtige Tokens, etc.

Auch ich bin in Bezug auf Typoskript verwirrt. Official documentation erwähnt klar, dass, wenn @Inject() nicht vorhanden ist, Injector die Typannotation des Parameters verwenden wird. Wenn Typinformationen während der Typoskriptreplikation gelöscht werden und DI beim Ausführen der App auftritt, wie kann Angular Typannotationen zur Laufzeit verwenden? Gibt es etwas, was mir fehlt?

+1

haben Sie den Service als Anbieter zur Komponente hinzufügen hinzuzufügen –

+1

Well Vor Das wäre wohl das Scoped 'NgModule', das die Komponente in Deklarationen beinhaltet. Aber der Punkt ist, wenn der Dienst "@ Injectible" nicht irgendwo als Provider registriert ist, dann ist er nicht ohne eine explizite Referenz verfügbar. –

+0

@Sachilaranawaka Ja, ich habe versucht sowohl NgModule und Anbieter für die Komponente –

Antwort

Verwandte Themen