我遇到了一个奇怪的问题。
我得到了非常简单的服务:
import { Inject, Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class EchoService {
constructor(private httpClient: HttpClient) {}
public makeCall(): Observable<any> {
return this.httpClient.get<any>('https://jsonplaceholder.typicode.com/posts/1');
}
}现在我正尝试在我的组件中重用它:
import { Component, Inject, OnInit } from '@angular/core';
import { EchoService } from './services/echo.service';
import { Observable } from 'rxjs/Observable';
@Component({
selector: 'my-app',
templateUrl: `app.component.html`,
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
public response: Observable<any>;
constructor(private echoService: EchoService) {}
public ngOnInit(): void {
this.response = this.echoService.makeCall();
}
}还有..。我遇到了Uncaught Error: Can't resolve all parameters for EchoService: (?).
当我从@Injectable切换到@Inject时,一切都正常:
constructor(@Inject(HttpClient) private httpClient: HttpClient) {}在组件中:
constructor(@Inject(EchoService) private echoService: EchoService) {}我的tsconfig.json是:
{
"compilerOptions": {
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [ "dom", "esnext" ]
}
}是什么情况?为什么@Inject可以工作,而@Injectable却不能工作?
发布于 2019-06-06 15:56:53
同样的情况。当我将项目从Angular 5迁移到7版本时。对于我的作品:
add to tsconfig.json - "emitDecoratorMetadata":true
完整的tsconfig.json:
{
"compilerOptions": {
"baseUrl": "./src",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"sourceMap": true,
"moduleResolution": "node",
"target": "es2015",
"rootDir": "./src",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
],
"skipLibCheck": true,
"types": []
}
}
发布于 2018-02-09 20:28:29
请检查您的@NgModule声明,也许您错过了imports列表中的HttpClientModule。
发布于 2018-02-14 19:05:20
如果我没理解错的话,你应该添加反射元数据库。https://www.typescriptlang.org/docs/handbook/decorators.html#metadata
https://stackoverflow.com/questions/48705550
复制相似问题