Не удается прочитать свойство 'get' из неопределенного при использовании http в службе в Angular 6 - PullRequest
0 голосов
/ 04 марта 2019

У меня есть две услуги.Одним из них является основной сервис и один конкретный сервис.В основном сервисе я делаю http запрос.В Angular 6 это не работает.(В Angular 7 работает отлично).

В Angular 6 я получаю Не могу прочитать свойство 'get' из неопределенного на http.

Вот мой код:

query-service.ts

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

@Injectable({
  providedIn: 'root'
})

export class QueryService {
  protected apiUrl: string = 'http://localhost:4200';

  constructor(private http: HttpClient) {}

  public query(uri: string): Observable<any> {
    const url = this.apiUrl + '/' + uri;

    return this.http.get(url, {responseType: 'json', withCredentials: true});
  }
}

client-search.service.ts

import {Injectable} from '@angular/core';
import {Client} from '../models/client';
import {Observable} from 'rxjs';
import {QueryService} from '../services/query.service';
import {map} from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})

export class ClientSearchService extends QueryService {

  public list(uri: string): Observable<any> {
    const clientResponse = this.query(uri);

    return clientResponse.pipe(
      map(data => data.collection),
      map((records: Client[]) => records.map((client: Client) => Client.factory(client)))
    );
  }

}

client-search.component.ts

import {Component, OnInit} from '@angular/core';
import {Client} from '../models/client';
import {ClientSearchService} from './client-search.service';
import {ClientsShareService} from '../services/clients-share.service';

@Component({
  selector: 'app-crm-client-search',
  templateUrl: './client-search.component.html',
  styleUrls: ['./client-search.component.css']
})

export class ClientSearchComponent implements OnInit {
  public client: Client = new Client();
  public clientList: Client[];

  constructor(public clientSearchService: ClientSearchService, public clientsShareService: ClientsShareService) {
  }

  ngOnInit() {

    const clientsList = this.clientSearchService.list('assets/files/clients.json');

    clientsList.subscribe((clients: Client[]) => {
      this.clientList = clients;
      this.clientsShareService.setData(clients);
    });

  }

}

1 Ответ

0 голосов
/ 04 марта 2019

Ваш дочерний класс имеет только конструктор по умолчанию, но родительский класс не имеет его.Таким образом, angular создает экземпляр ClientSearchService без внедрения службы HttpClient.

В настоящее время у вас есть следующее:

ClientSearchService extends QueryService {
  constructor(){
    super();
  }
}

Вам необходимо добавить не-по умолчаниюконструктор для дочернего класса выглядит следующим образом:

export class ClientSearchService extends QueryService{
 constructor(http: HttpClient){
   super(http)
 }
 ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...