首页 > 解决方案 > 角度:StaticInjectorError(ExplorationEditorPageModule)[String]

问题描述

我目前正在将 oppia 的代码库https://github.com/oppia/oppia从 AngularJS(1.x) 迁移到 Angular(2+)。我将服务 UtilsService.ts(https://github.com/oppia/oppia/blob/develop/core/templates/dev/head/services/UtilsService.ts)迁移到以下内容:

import { Injectable } from '@angular/core';
import { downgradeInjectable } from '@angular/upgrade/static';

@Injectable({
  providedIn: 'root'
})
export class UtilsService {
  isEmpty(obj: any): boolean {
    for (var property in obj) {
      if (obj.hasOwnProperty(property)) {
        return false;
      }
    }
    return true;
  }

  isString(input: any): boolean {
    return (typeof input === 'string' || input instanceof String);
  }
}

angular.module('oppia').factory(
  'UtilsService',
  downgradeInjectable(UtilsService));

该服务用于许多其他服务和指令。现在启动应用程序时出现此错误。

StaticInjectorError(ExplorationEditorPageModule)[String]: 
  StaticInjectorError(Platform: core)[String]: 
    NullInjectorError: No provider for String!
  StaticInjectorError(Platform: core)[String]: 
    NullInjectorError: No provider for String!
    at NullInjector.push../node_modules/@angular/core/fesm5/core.js.NullInjector.get (webpack:///node_modules/@angular/core/fesm5/core.js:725:0)
    at resolveToken (webpack:///node_modules/@angular/core/fesm5/core.js:11917:0)
    at tryResolveToken (webpack:///node_modules/@angular/core/fesm5/core.js:11861:0)
    at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (webpack:///node_modules/@angular/core/fesm5/core.js:11763:0)
    at resolveToken (webpack:///node_modules/@angular/core/fesm5/core.js:11917:0)
    at tryResolveToken (webpack:///node_modules/@angular/core/fesm5/core.js:11861:0)
    at StaticInjector.push../node_modules/@angular/core/fesm5/core.js.StaticInjector.get (webpack:///node_modules/@angular/core/fesm5/core.js:11763:0)
    at resolveNgModuleDep (webpack:///node_modules/@angular/core/fesm5/core.js:20233:0)
    at NgModuleRef_.push../node_modules/@angular/core/fesm5/core.js.NgModuleRef_.get (webpack:///node_modules/@angular/core/fesm5/core.js:20904:0)
    at injectInjectorOnly (webpack:///node_modules/@angular/core/fesm5/core.js:628:0)
    at URL: http://localhost:8181/create/hCByec28SLfx#/gui/Introduction

这就是 ExplorationEditorPageModule 的外观 - https://github.com/oppia/oppia/blob/develop/core/templates/dev/head/pages/exploration-editor-page/exploration-editor-page.module.ts

我被困在这里,无法继续前进。

标签: angularjsangularmigration

解决方案


TypeScript 中的字符串需要小写,这就是你的代码失败的原因

isString(input: any): boolean { return (typeof input === 'string' || input instanceof String); <--- 这里 }

也许你应该换掉你的支票并检查typeof input === 'String' || input instanceof string

错误试图告诉您“字符串”不是已知类型,鉴于上述知识,这不应该令人惊讶。


推荐阅读