使用angular 4和observable时出错。
src / app / ca-calendar / calendar.component.ts(84,5)中的错误:错误TS2322:类型'Observable'不能分配给'Observable'类型。 类型'年'不能指定为'年[]'类型。 'Year'类型中缺少属性'includes'。
我做错了什么?
服务:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { Year, Month } from '../../models';
@Injectable()
export class CalendarService {
endPoint: string;
private _calendarUrl = '/api/mycalendar';
constructor(private http: HttpClient) {
}
getYear(id: string): Observable<Year> {
return this.http.get(this._calendarUrl + '?id=' + id)._catch(this.handleError);
}
getYears(): Observable<Year> {
return this.http.get(this._calendarUrl)
.map((res: Response) => res.json())
._catch(this.handleError);
组件:
import { Component, OnInit } from '@angular/core';
import { MonthCalendarComponent } from './month-calendar/month-calendar.component';
import { Month } from '../models/month';
import { MonthsService } from '../services/calendar/months/months.service';
import { CalendarService } from '../services/calendar/calendar.service';
import { Year } from '../models';
import { Observable } from 'rxjs/Observable';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'ca-calendar',
templateUrl: './calendar.component.html',
styleUrls: ['./calendar.component.css']
})
export class CalendarComponent implements OnInit {
public myYears$: Observable<Year[]>;
constructor(private calendarService: CalendarService, private monthsService: MonthsService) {}
ngOnInit() {
this.myYears$ = this.calendarService.getYears();
}
...和模型
import { Month } from './month';
import { Week } from './week';
export class Year {
id: String;
number: Number;
months: Month[];
weeks: Week[];
constructor() {
}
}
答案 0 :(得分:0)
您的方法getYears签名为Observable<Year>
,您的变量$ myYears使用Observable<Year[]>
键入。
尝试用getYears方法的Observable<Year[]>
签名做类似的事情:
getYears(): Observable<Year[]> {
return this.http.get(this._calendarUrl)
.map((res: Response) => res.json())
.map((yearsData: any) => {
return yearsData.map(yearData => {
const year = new Year());
year.id = yearData.id;
...
return year;
})
})
._catch(this.handleError);
使用该方法,您可以直接获得模型的实例并获得良好的签名。
希望它可以帮到你。