首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Inject工作时@Injectable不工作

@Inject工作时@Injectable不工作
EN

Stack Overflow用户
提问于 2018-02-09 20:10:45
回答 3查看 239关注 0票数 0

我遇到了一个奇怪的问题。

我得到了非常简单的服务:

代码语言:javascript
复制
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');
   }
}

现在我正尝试在我的组件中重用它:

代码语言:javascript
复制
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时,一切都正常:

代码语言:javascript
复制
 constructor(@Inject(HttpClient) private httpClient: HttpClient) {}

在组件中:

代码语言:javascript
复制
 constructor(@Inject(EchoService) private echoService: EchoService) {}

我的tsconfig.json是:

代码语言:javascript
复制
{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": [ "dom", "esnext" ]
  }
}

是什么情况?为什么@Inject可以工作,而@Injectable却不能工作?

EN

回答 3

Stack Overflow用户

发布于 2019-06-06 15:56:53

同样的情况。当我将项目从Angular 5迁移到7版本时。对于我的作品:

add to tsconfig.json - "emitDecoratorMetadata":true

完整的tsconfig.json:

代码语言:javascript
复制
{
  "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": []
  }
}

票数 1
EN

Stack Overflow用户

发布于 2018-02-09 20:28:29

请检查您的@NgModule声明,也许您错过了imports列表中的HttpClientModule

票数 0
EN

Stack Overflow用户

发布于 2018-02-14 19:05:20

如果我没理解错的话,你应该添加反射元数据库。https://www.typescriptlang.org/docs/handbook/decorators.html#metadata

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48705550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档