同样的代码也适用于angular 8,但现在它给出了这个错误。“无法通过依赖注入创建类'BaseService‘,因为它没有角度装饰器。这将导致在运行时出错。
Either add the @Injectable() decorator to 'BaseService', or configure a different provider (such as a provider with 'useFactory')."我只是想在这里实现简单的继承。
1) BaseService.ts (父类)
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 (子类)
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
@NgModule({
declarations: [
AuthComponent,
LoginComponent,
RegisterComponent
],
imports: [
CommonModule,
AuthRoutingModule,
HttpClientModule,
FormsModule,
ReactiveFormsModule
],
providers: [AuthService, BaseService]
})
export class AuthModule { }发布于 2020-08-20 11:55:09
如果您想将服务用于单个模块,则不需要使用@Injectable({ providedIn: 'root' })。
两步:
@Injectable()将service.providers: [ BaseService ]添加到模块内部NgModule.中
发布于 2020-04-07 21:45:08
您已将BaseService添加到模块提供程序中。BaseService在其构造函数中接受参数postfixUrl。
您至少应该从提供程序中删除BaseService,因为Angular不知道如何解析参数。
向模块提供程序添加服务意味着该服务的一个实例将在该模块中共享。添加@Injectable({ providedIn: 'root' })意味着它将在整个应用程序中共享。
你们两个相互竞争的注册依赖注入服务的方法,注册BaseService是无效的。
https://stackoverflow.com/questions/61081250
复制相似问题