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

Relaterte artikler