【问题标题】:Service Heritage in Angular 5+Angular 5+ 中的服务遗产
【发布时间】:2018-10-18 17:00:48
【问题描述】:

我正在尝试对我的应用程序中的某些组件和服务进行概括和参数化,以便节省公共部分的时间和代码。

有了组件,我很容易继承成功;但是当尝试对服务进行相同的操作时,我失败了。有人可以帮我看看我的错误吗?

我的 ParentService 它:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';

import { URL } from '../constants';

@Injectable()
export class GlobalService {

constructor(public http: HttpClient, public name:string='category') {

}

returnData(url){
 return this.http.get(url);
}

getList():Observable<any>{
 var url = URL+'/'+this.name+'/list';
 console.log("-> URL: "+url);
 return this.returnData(url);
}

}

我的 SonService 是这样的:

import { Injectable } from '@angular/core'; 
import { HttpClient } from '@angular/common/http';
import { GlobalService } from './global.service';

@Injectable()
export class ActorService extends GlobalService{ 

  constructor (public http: HttpClient){
    super(http, 'actor');
  }
}

我在 app.module.ts 中导入了所有内容,并包含了 un providers(第一个是 globalService)。

我在“ng build --prod”中遇到的错误是:

ERROR in : Can't resolve all parameters for GlobalService in myDirectoryPath/global.service.ts: ([object Object], ?).

【问题讨论】:

  • 您是否在应用程序的任何位置注入GlobalService

标签: angular angular5 angular-services


【解决方案1】:

我假设您想要实现某种通用服务,该服务在您的其他服务之间拥有一些共享逻辑。我还假设您不会在应用程序的任何部分中注入此 GlobalService,而只是在扩展此部分的部分。

如果是这种情况,您应该从您的 GlobalService 中删除 @Injectable() 装饰器。这样做是告诉 Angular 尝试在其构造函数中注入所有内容。 Angular 知道如何注入http,但它不知道如何注入name。因此,如果您删除 @Injectable(),Angular 将忽略此服务。您的其他服务将在其构造函数中注入http(如您在代码中所示)并将其传递给GlobalService

【讨论】:

  • 谢谢;这就是解决方案。我只需要从 app.module.ts 中删除 GlobalService
  • @DoberDog 你也应该从GlobalService 中删除@Injectable()。看代码的人可能会感到困惑。
【解决方案2】:

当您导入此服务时,您必须为第二个参数“名称”属性提供一个值。 这就是这里要解释的:([object Object], ?)

看看official doc, where the DI is explained。 您可能需要在提供此服务时使用“useValue”。

或者如果您不提供此值,只需删除第二个参数即可。

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    相关资源
    最近更新 更多