Angular 4: служба внедрения, имеющая @angular/http в качестве зависимости в классе, не являющемся компонентом

Привет, я новичок в Angular 4. У меня есть одна служба с именем «httpService», которая имеет @angular/http в качестве одной из зависимостей, есть и другие, которые выполняют обработку ошибок.

Теперь у меня есть обычный класс (кроме компонента), скажем, «Child.ts», который расширяет базовый класс «Base.ts» с помощью конструктора, который устанавливает некоторые свойства в классе и использует вышеупомянутый httpService для извлечения данных с сервера через остальные API.

Моя общая структура выглядит следующим образом.

Base.ts
============================================================
export class Base {
  public url: string;
  public httpSvc: HttpService;

  constructor(url) {
    this.url = url;
  }

  public getUrl(): string {
    return this.url;
  }

  public query(reqParams: URLSearchParams): Observable<any> {
    return this.httpSvc.get(this.getUrl(), reqParams);
  }
}

И иметь класс, который расширяет базовый класс.

Child.ts
============================================================
export class Child extends Base {
  first_name: string;
  last_name: string;
  email: string;

  constructor(url: string) {
    super(url);
  }

  getCurrentUser(): Observable<User> {
    return this.httpSvc.get(this.url + 'get-user-profile');
  }
}

Таким образом, у меня есть каждая модель со своим методом для получения данных с сервера.

Теперь в такой ситуации, как я могу использовать httpService, поскольку он еще не инициализирован.

Пожалуйста, предложите мне способ или лучшее решение.

Спасибо

Сатиш Лахани


person Satish Lakhani    schedule 19.09.2017    source источник
comment
Что ж, добавьте службу http в аргументы конструктора и создайте эти объекты из компонента или службы angular, куда внедряется httpSvc.   -  person JB Nizet    schedule 19.09.2017


Ответы (1)


Вам нужно ввести его следующим образом:

constructor(private http: HttpService)

не забудьте указать на верхнем уровне, например, в app.module:

providers:[
 HttpService
],
person methgaard    schedule 19.09.2017
comment
Спасибо за ответ, но при создании экземпляра дочернего класса с URL-адресом я не хочу передавать экземпляр httpService, так что в этом случае, как это будет работать? - person Satish Lakhani; 19.09.2017
comment
@SatishLakhani, этого не будет. Объект не может использовать другой объект, не имея ссылки на этот другой объект. - person JB Nizet; 19.09.2017
comment
@SatishLakhani, вы имеете в виду вызов статического метода? - person eko; 19.09.2017
comment
@JBNizet, так есть ли другой способ добиться того же поведения, о котором я спрашиваю? - person Satish Lakhani; 19.09.2017
comment
Я ответил в комментарии на ваш вопрос. - person JB Nizet; 19.09.2017
comment
вы можете найти свой ответ здесь: stackoverflow.com/questions/37482460/ и здесь: stackoverflow.com/questions/39101865/ - person MohammadJavad Seyyedi; 19.09.2017