#angular #typescript #inheritance
Вопрос:
Я получаю эту ошибку при попытке запустить свой код. У меня есть базовый класс API. Я использую этот базовый базовый метод для всех сервисов, которые я мог бы создать. Затем у меня есть служба прогноза погоды, которая скорее наследует или расширяет этот базовый класс. Я создаю необходимые функции на основе этого, а затем использую свой сервис для реализации функций CRUD для прогнозирования погоды в своих различных компонентах.
АпиБаза
export class ApiBase
{
public ID: any;
forecast: any = [];
constructor(private http: HttpClient, private router: ActivatedRoute)
{
}
getWeatherForecast(): Observable<any[]>
{
return this.http.get<any[]>('API/' this.constructor.name)
}
}
Прогноз погоды.Обслуживание
import { ApiBase } from "./ApiBase"
export class WeatherForecast extends ApiBase
{
forecasts: any[];
get()
{
return super.getWeatherForecast()
}
}
Прогноз погоды.Компонент
import { Component, OnInit } from '@angular/core';
import { WeatherForecast } from 'src/WeatherForecast.service';
@Component({
selector: 'app-WeatherForecast',
templateUrl: './WeatherForecast.component.html'
})
export class WeatherForecastComponent implements OnInit
{
constructor(private service: WeatherForecast) { }
forecasts: any = [];
ID = this.forecasts.ID;
ngOnInit()
{
this.refreshWeatherForecastList();
}
refreshWeatherForecastList()
{
return this.service.get().subscribe(data =>
{
this.forecasts = data;
});;
}
}
Комментарии:
1. Вы используете
@Injectable()
аннотации к тем сервисам, которые у вас есть, верно?
Ответ №1:
Я не вижу ничего плохого в наследовании , но, поскольку в сообщении об ошибке указано Cannot read property 'get' of undefined
, я предполагаю, что у вашей службы на самом деле нет Injectable
аннотации. Таким образом, он нигде не предоставляется в вашем приложении, если вы не предоставляете его «вручную». Вы должны добавить его следующим образом:
import { ApiBase } from "./ApiBase"
@Injectable({
providedIn: 'root'
})
export class WeatherForecast extends ApiBase
{
forecasts: any[];
get()
{
return super.getWeatherForecast()
}
}