angularjs - 角度: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。
我被困在这里,无法继续前进。
解决方案
TypeScript 中的字符串需要小写,这就是你的代码失败的原因
isString(input: any): boolean { return (typeof input === 'string' || input instanceof String); <--- 这里 }
也许你应该换掉你的支票并检查typeof input === 'String' || input instanceof string
错误试图告诉您“字符串”不是已知类型,鉴于上述知识,这不应该令人惊讶。
推荐阅读
- java - java.lang.IllegalStateException:驱动程序可执行文件不存在:尝试通过 Selenium、ChromeDriver 和 Chrome 执行测试时
- javascript - 操作 Promise 返回的对象和数组
- linux - 在 bash 脚本中,count1 = `cat $affected_ip|wc -l`;echo $count1;
- yii2 - Yii2 : 设置访问控制匹配回调
- visual-studio - 为什么这个基数排序 CUDA 代码只对 32 个元素进行排序?
- command - 如何从管理面板运行所有 magento 2 命令
- ruby-on-rails - Rails 5 - 使用自定义 slug 路由
- maven - 注册表中缺少 JAI RangeLookup 操作,但在 IntelliJ 中工作正常
- ruby-on-rails - 两个指向同一个文件的回形针附件
- oracle - 如何获取Oracle数据库中函数的历史