错误:"无法解析e:(?)的所有参数。"

时间:2017-02-03 11:09:49

标签: angular angular-cli

在使用 angular-cli 部署到github页面后出现此类错误:

  

错误:"无法解析e:(?)的所有参数。"

本地应用程序有效。 您建议采取哪些步骤来找到问题所在?

尝试使用angular-cli beta29 beta30

UPD :我已将路由器从应用程序中移除以进行测试。不是我只有一个猜测,它与DI有关。

UPD2(找到了地方)

问题在于覆盖RequestOptions,所以:

export class RequestOptionsService extends RequestOptions {}

并提供者定义:

{ provide: RequestOptions, useClass: RequestOptionsService },
  

这对我来说仍然是一个问题。

  • 不要覆盖RequestOptions构造函数 - 错误。
  • 使用空参数覆盖RequestOptions构造函数 - 无错误
  • 使用参数覆盖RequestOptions构造函数 - 错误

这是我覆盖构造函数的方式:

constructor(options?: RequestOptionsArgs) {
  super(options);
}

这里可能有什么问题?

UPD3(解决自己的案例)

问题的确存在RequestOptions,所以你不应该这样做:

export class RequestOptionsService extends RequestOptions {}

但仅限:

export class RequestOptionsService extends BaseRequestOptions {}

2 个答案:

答案 0 :(得分:2)

确保:

  • 您的"emitDecoratorMetadata": true
  • 中有tsconfig.js
  • 每项服务都不缺少@Injectable() decorator
  • 组件构造函数注入您的服务(将它们作为传递 参数)

答案 1 :(得分:1)

官方的例子是:

 class MyOptions extends BaseRequestOptions {
   search: string = 'coreTeam=true';
 }

 bootstrap(App, [HTTP_PROVIDERS, {provide: RequestOptions, useClass: MyOptions}]);

事实上,export class RequestOptionsService extends RequestOptions {}也应该完美无缺。可能是angular-cli特定问题(我可以在我的设置上执行此操作)。

如果您的服务具有非可选参数,那么@Injectable()是必须的。此外,还必须提供参数(在您的情况下为RequestOptionsArgs)或标记为@Optional()