首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >angular 9依赖注入错误。“该类不能通过依赖注入创建,因为它没有角度装饰器。

angular 9依赖注入错误。“该类不能通过依赖注入创建,因为它没有角度装饰器。
EN

Stack Overflow用户
提问于 2020-04-07 21:34:20
回答 2查看 7.3K关注 0票数 5

同样的代码也适用于angular 8,但现在它给出了这个错误。“无法通过依赖注入创建类'BaseService‘,因为它没有角度装饰器。这将导致在运行时出错。

代码语言:javascript
复制
Either add the @Injectable() decorator to 'BaseService', or configure a different provider (such as a provider with 'useFactory')."

我只是想在这里实现简单的继承。

1) BaseService.ts (父类)

代码语言:javascript
复制
import { environment } from 'src/environments/environment';
import { HttpHeaders } from '@angular/common/http';

export class BaseService {
    url
    constructor(postfixUrl) {
        this.url = environment.backendUrl + postfixUrl
    }

    setUpHeaders() {
       return {
           headers: new HttpHeaders({
               'Content-Type': 'application/json'
           })
       }
} 
}

2) AuthService.ts (子类)

代码语言:javascript
复制
import { Injectable } from "@angular/core";
import {HttpClient} from '@angular/common/http'
import { BaseService } from './base.service';

@Injectable({
    providedIn: 'root'
  })

export class AuthService extends BaseService {
    url
    constructor(private http: HttpClient) {
        super('auth')
    }
    register(user) {
        return this.http.post(this.url, user, this.setUpHeaders())
    }
} 

3) auth.module.ts

代码语言:javascript
复制
@NgModule({
  declarations: [
    AuthComponent,
    LoginComponent,
    RegisterComponent
  ],
  imports: [
    CommonModule,
    AuthRoutingModule,
    HttpClientModule,
    FormsModule,
    ReactiveFormsModule


  ],
  providers: [AuthService, BaseService]
})
export class AuthModule { }

the error

EN

回答 2

Stack Overflow用户

发布于 2020-08-20 11:55:09

如果您想将服务用于单个模块,则不需要使用@Injectable({ providedIn: 'root' })

两步:

  1. @Injectable()将service.
  2. providers: [ BaseService ]添加到模块内部NgModule.

票数 6
EN

Stack Overflow用户

发布于 2020-04-07 21:45:08

您已将BaseService添加到模块提供程序中。BaseService在其构造函数中接受参数postfixUrl

您至少应该从提供程序中删除BaseService,因为Angular不知道如何解析参数。

向模块提供程序添加服务意味着该服务的一个实例将在该模块中共享。添加@Injectable({ providedIn: 'root' })意味着它将在整个应用程序中共享。

你们两个相互竞争的注册依赖注入服务的方法,注册BaseService是无效的。

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

https://stackoverflow.com/questions/61081250

复制
相关文章

相似问题

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