angular - Hvordan kan jeg sende et argument til en provider-konstruktør i Ionic2/Angular2?
Jeg prøver å overføre min Ionic2.beta11-app til den nye Ionic2.rc0-utgivelsen. De fleste ting var ganske enkle, men jeg har et problem med AoT-kompilatoren.
Jeg har en AuthService:
@Injectable()
export class AuthService {
constructor(@Inject(Http) http: Http) {
this.http = http;
}
...
}
Jeg injiserer det i appen min i filen src/app/app.module.ts:
@NgModule({
declarations: [
MyApp,
...
],
imports: [
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
...
],
providers: [
AuthService
]
})
Alt fungerer fint når jeg kjører ionic serve, men når jeg prøver å bygge det, får jeg følgende feil:
ngc error: Error: Error at .../.tmp/app/app.module.ngfactory.ts:397:78: Supplied parameters do not match any signature of call target.
Linjer 396 - 399:
get _AuthService_74():import44.AuthService {
if ((this.__AuthService_74 == (null as any))) { (this.__AuthService_74 = new import44.AuthService()); }
return this.__AuthService_74;
}
Problemet er at new import44.AuthService() forventer et argument av typen http.
Det interessante er at alt fungerer fint når jeg manuelt erstatter constructor(http:Http) med constructor() i definisjonsfilen.
Jeg leste gjennom alle StackOverflow-svarene jeg kunne finne, men ingen av løsningene løste problemet mitt.
Må jeg endre konstruktøren i AuthService eller måten jeg injiserer den inn i appen min på? Takk for hjelpen.
Svar #1
Du må endre måten du definerer leverandøren på:
@NgModule({
...
providers: [
Http,
{
provide: AuthService,
useFactory: getAuthService,
deps: [Http]
}
]
})
Det siste stykket er fabrikkfunksjonen:
export function getAuthService(http: Http): LoggingService {
return new AuthService(http);
}
Se også Migrering til Ionic 2 RC 0 - ngc feiler
