Angular 角度本地库StaticInjectorError(AppModule)[HttpHandler->;Injector]
我已经有一个工作应用程序几个月了,现在没有任何问题。我正在尝试将一些常用服务迁移到一个库中,以供其他应用程序使用 我试图在没有角度CLI的情况下做到这一点(只是为了学习目的性)。我使用的是angular 7.1.1 项目结构:Angular 角度本地库StaticInjectorError(AppModule)[HttpHandler->;Injector],angular,typescript,npm,angular-httpclient,tsc,Angular,Typescript,Npm,Angular Httpclient,Tsc,我已经有一个工作应用程序几个月了,现在没有任何问题。我正在尝试将一些常用服务迁移到一个库中,以供其他应用程序使用 我试图在没有角度CLI的情况下做到这一点(只是为了学习目的性)。我使用的是angular 7.1.1 项目结构: - site .gitlab-ci.yml - core-lib package.json tsconfig.json - src index.ts core
- site
.gitlab-ci.yml
- core-lib
package.json
tsconfig.json
- src
index.ts
core
my.service.js
- ui-site
package.json
tsconfig.json
- app
app.modules.ts
- table
table.component.ts
table.module.ts
核心库>package.json
{
"name": "core-lib",
"version": "1.0.0",
"private": true,
"dependencies": {
"core-js": "^2.5.7",
"lodash": "^4.17.11",
"moment": "^2.22.2",
"rxjs": "6.3.3",
"zone.js": "0.8.11"
},
"devDependencies": {
"@angular/common": "7.1.1",
"@angular/compiler": "7.1.1",
"@angular/core": "7.1.1",
"@angular/forms": "7.1.1",
"@angular/platform-browser": "7.1.1",
"@angular/platform-browser-dynamic": "7.1.1",
"@angular/router": "7.1.1",
"@types/core-js": "0.9.35",
"@types/jasmine": "7.2.48",
"@types/node": "7.0.5",
"typescript": "3.3"
}
"peerDependencies": {
"@angular/common": "7.1.1",
"@angular/compiler": "7.1.1",
"@angular/core": "7.1.1",
"@angular/forms": "7.1.1",
"@angular/router": "7.1.1",
"rxjs": "6.3.3",
"zone.js": "0.8.11"
}
}
{
"name": "ui-site",
"version": "1.0.0",
"private": true,
"dependencies": {
"@angular/common": "7.1.1",
"@angular/compiler": "7.1.1",
"@angular/core": "7.1.1",
"@angular/forms": "7.1.1",
"@angular/platform-browser": "7.1.1",
"@angular/platform-browser-dynamic": "7.1.1",
"@angular/router": "7.1.1",
"@types/core-js": "0.9.35",
"@types/jasmine": "7.2.48",
"@types/node": "7.0.5",
"core-js": "^2.5.7",
"lodash": "^4.17.11",
"moment": "^2.22.2",
"rxjs": "6.3.3",
"zone.js": "0.8.11",
"d3": "3.5.12",
"jquery": "3.1.0",
"core-lib": "file:../core-lib"
},
"devDependencies": {
"@types/core-js": "0.9.35",
"@types/jasmine": "7.2.48",
"@types/node": "7.0.5",
}
}
核心库>tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "es6",
"lib": ["es6", "es2016", "dom"],
"moduleResolution": "node",
"sourceMap": true,
"rootDir": "src",
"baseUrl": "src",
"sourceMap": true,
"experimentalDecorators": true,
"allowJs": true,
"preserveSymlinks": true,
"typeRoots": ["./node_modules/@types"],
"paths": {
"@angular/*": [
"../node_modules/@angular/*"
]
},
},
"include": [
"./src/**/*"
]
}
核心库>src>index.ts
import { ModuleWithProviders, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HttpClientModule } from '@angular/common/http';
import { MyService } from './core/my.service';
@NgModule({
imports: [CommonModule, HttpClientModule],
exports: [HttpClientModule]
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [MyService]
};
}
}
MyService非常简单,它使用httpClient获取本地.json文件,如下所示:
当我运行tsc.cmd时,我可以看到编译器已经成功地创建了.js和.sourcmap文件
ui站点>package.json
{
"name": "core-lib",
"version": "1.0.0",
"private": true,
"dependencies": {
"core-js": "^2.5.7",
"lodash": "^4.17.11",
"moment": "^2.22.2",
"rxjs": "6.3.3",
"zone.js": "0.8.11"
},
"devDependencies": {
"@angular/common": "7.1.1",
"@angular/compiler": "7.1.1",
"@angular/core": "7.1.1",
"@angular/forms": "7.1.1",
"@angular/platform-browser": "7.1.1",
"@angular/platform-browser-dynamic": "7.1.1",
"@angular/router": "7.1.1",
"@types/core-js": "0.9.35",
"@types/jasmine": "7.2.48",
"@types/node": "7.0.5",
"typescript": "3.3"
}
"peerDependencies": {
"@angular/common": "7.1.1",
"@angular/compiler": "7.1.1",
"@angular/core": "7.1.1",
"@angular/forms": "7.1.1",
"@angular/router": "7.1.1",
"rxjs": "6.3.3",
"zone.js": "0.8.11"
}
}
{
"name": "ui-site",
"version": "1.0.0",
"private": true,
"dependencies": {
"@angular/common": "7.1.1",
"@angular/compiler": "7.1.1",
"@angular/core": "7.1.1",
"@angular/forms": "7.1.1",
"@angular/platform-browser": "7.1.1",
"@angular/platform-browser-dynamic": "7.1.1",
"@angular/router": "7.1.1",
"@types/core-js": "0.9.35",
"@types/jasmine": "7.2.48",
"@types/node": "7.0.5",
"core-js": "^2.5.7",
"lodash": "^4.17.11",
"moment": "^2.22.2",
"rxjs": "6.3.3",
"zone.js": "0.8.11",
"d3": "3.5.12",
"jquery": "3.1.0",
"core-lib": "file:../core-lib"
},
"devDependencies": {
"@types/core-js": "0.9.35",
"@types/jasmine": "7.2.48",
"@types/node": "7.0.5",
}
}
当我在上面运行npm安装时,没有问题,我可以在ui-site>node\u-modules文件夹中看到核心库目录和文件
ui站点>app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouterModule } from '@angular/router';
import { HttpClientModule } from '@angular/common/http';
import { TableModule } from './table/table.module';
import { SharedModule } from '../node_modules/core-lib/src/index';
@NgModule({
imports: [ BrowserModule, RouterModule, HttpClientModule, SharedModule.forRoot(), TableModule ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
ui站点>应用程序>表格>表格组件
import { Component } from '@angular/core';
import { MyService } from '../../../node_modules/core-lib/src/core/my.service'
@Component({
template: `hi`
})
export class TableComponent {
constructor(private myService: MyService) {
this.myService..requestConfig()
.subscribe((config) => {
console.log(config);
},
(err) => {
console.log(err)
});
}
}
浏览器中出现错误:
Error: StaticInjectorError(AppModule)[HttpHandler -> Injector]:
StaticInjectorError(Platform: core)[HttpHandler -> Injector]:
NullInjectorError: No provider for Injector!
您是否缺少为root调用
的功能?
在你的例子中,你有
SharedModule.forRoot
@NgModule({
imports: [ ..., SharedModule.forRoot, TableModule ],
// ^
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
更新后
如果使用Windows 10和npm链接库中的服务,请尝试添加
"preserveSymlinks": true
进入
angular.json位于projects/*/architect/build/options抱歉,这是一个复制粘贴问题。我正确地执行了forRoot()。更新q.@OamPsy Updated。我已经将其添加到我的tsconfig文件中,但是angular.json在哪里?我的项目中没有该文件如果您使用Angular 7,您必须拥有这些文件这是作为Angular cli的一部分创建的吗?我没有使用cli。