javascript - Injektion med hjälp av en InjectionToken?
Försöker injicera ett objekt med hjälp av en InjectionToken.
I AppModule har jag:
export const tokenConfigKey = new InjectionToken('config');
const tokenBasedConfig = {
provide: tokenConfigKey,
useValue: {
key: 'value'
}
}
Och i AppComponent:
@Component({
selector: 'my-app',
template:`<h1>Hello Angular Lovers!</h1>`
})
export class AppComponent {
constructor(@Inject('config') config,
@Inject(tokenConfigKey) configByToken) {
}
}
Detta är ett komplett stacblitz-exempel
Injektion med strängnyckeln fungerar, men injektion med token misslyckas. Några idéer varför?
Artikel
Här är en artikel ifall någon vill leka med detta
Svar #1
Ett cirkulärt beroendeproblem kan finnas på grund av att AppModule importerar AppComponent och AppComponent importerar InjectionToken från AppModule.
Att flytta token till separat löser problemet:
token.ts
import { InjectionToken } from '@angular/core';
export const BASE_URL = new InjectionToken<string>('BaseUrl');
app.module.ts
@NgModule({
providers: [{ provide: BASE_URL, useValue: { key: 'http://localhost' } }],
app.component.ts
constructor(@Inject(BASE_URL) configByToken) {
console.log(configByToken);
}
