gpt4 book ai didi

angular - 如何将参数传递给 Ionic2/Angular2 中的提供者构造函数?

转载 作者:太空狗 更新时间:2023-10-29 17:07:04 26 4
gpt4 key购买 nike

我正在尝试将我的 Ionic2.beta11 应用程序移植到新的 Ionic2.rc0 版本。大多数事情都非常简单,但我对 AoT 编译器有疑问。

我有一个 AuthService:

@Injectable()
export class AuthService {
constructor(@Inject(Http) http: Http) {
this.http = http;
}
...
}

我将它注入(inject)到我的应用程序中的 src/app/app.module.ts 文件中:

@NgModule({
declarations: [
MyApp,
...
],
imports: [
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
...
],
providers: [
AuthService
]
})

运行 ionic serve 时一切正常,但是当我尝试构建它时出现以下错误:

ngc error: Error: Error at .../.tmp/app/app.module.ngfactory.ts:397:78: Supplied parameters do not match any signature of call target.

第 396 - 399 行:

get _AuthService_74():import44.AuthService {
if ((this.__AuthService_74 == (null as any))) { (this.__AuthService_74 = new import44.AuthService()); }
return this.__AuthService_74;
}

问题是 new import44.AuthService() 需要一个 http 类型的参数。

有趣的是,当我手动将定义文件中的 constructor(http: Http) 替换为 constructor() 时,一切正常。

我通读了我能找到的所有 StackOverflow 答案,但没有一个解决方案解决了我的问题。

我是否需要更改 AuthService 中的构造函数或将其注入(inject)我的应用程序的方式?感谢您的帮助。

最佳答案

您必须改变定义提供者的方式:

@NgModule({
...
providers: [
Http,
{
provide: AuthService,
useFactory: getAuthService,
deps: [Http]
}
]
})

最后一 block 是工厂函数:

export function getAuthService(http: Http): LoggingService {
return new AuthService(http);
}

另见 Migrating to Ionic 2 RC 0 - ngc fails

关于angular - 如何将参数传递给 Ionic2/Angular2 中的提供者构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39829856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com