Ich frage mich, warum Angular 2 Anbieter Syntax funktioniert nicht, wenn ich einen bestimmten Wert über das useValue
Feld zur Verfügung stellen möchten.Angular 2 Anbieter arbeitet nicht mit useValue und Funktionsaufruf an neuen
Zum Beispiel in den app.module.ts I
// Abstracted base class (since interfaces don't work with libraries and tsc)
export class Base {
constructor(public bar:Bar) {
}
}
export class Foo extends Base {
constructor(public bar:Bar) {
super(bar);
}
}
export class Bar {
hello = "world";
}
@NgModule({
declarations: [
AppComponent,
],
imports: [
],
providers: [
{provide: Base, useValue: new Foo(new Bar())}
],
bootstrap: [AppComponent]
})
export class AppModule {
}
Der Versuch, dies wirft einen Fehler bei ng build
haben:
ERROR in Error encountered resolving symbol values statically. Calling function 'Foo', function calls are not supported. Consider replacing the function or lambda with a reference to an exported function, resolving symbol AppModule in /Users/tbeauvais/Code/example-sdk/src/app/app.module.ts, resolving symbol AppModule in /Users/tbeauvais/Code/example-sdk/src/app/app.module.ts
Ich bin immer um diese, indem einfach das Feld, useClass
und dann die Parameter über deps
wie folgt eingeben:
...
providers: [
Bar,
{provide: Base, useClass: Foo, deps:[Bar]}
],
...
Es funktioniert, es ist einfach nicht ideal und ich frage mich, was mir hier fehlt. Außerdem möchte ich Bar
ohne Grund nicht injizieren müssen.
Jede Hilfe würde sehr geschätzt werden. Prost!
Sie sollten überprüfen: https://github.com/rangle/angular-2-aot-sandbox – echonax