我有一项服务,该服务从http请求返回对象。
我正在尝试将响应作为数据源输入传递,但是它引发错误Argument of type 'Object' is not assignable to parameter of type 'ReleasenoteData'
我需要显示标题。请帮助
响应如下所示,
{
"results":[
{
"id":"203901655",
"type":"page",
"status":"current",
"title":"Some Title",
"restrictions":{
},
.....
下面是我的代码,
import { Component, OnInit, ViewChild } from '@angular/core';
import { ReleaseService } from './release.service';
import {MatPaginator, MatSort, MatTableDataSource} from '@angular/material';
@Component({
selector: 'releases',
templateUrl: './releases.component.html'
})
export class ReleasesComponent implements OnInit {
title = 'Release notes';
displayedColumns = ['releasenotes'];
dataSource: MatTableDataSource<ReleasenoteData>;
data:any;
@ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;
constructor ( private releaseNotes: ReleaseService ) {
}
ngOnInit () {
const data: ReleasenoteData[] = [];
this.data = this.releaseNotes.getReleaseNotes()
.subscribe(response => data.push(response));
}
ngAfterViewInit() {
this.dataSource.paginator = this.paginator;
this.dataSource.sort = this.sort;
}
applyFilter(filterValue: string) {
filterValue = filterValue.trim(); // Remove whitespace
filterValue = filterValue.toLowerCase(); // Datasource defaults to lowercase matches
this.dataSource.filter = filterValue;
}
}
export interface ReleasenoteData {
id: string;
title: string;
}
服务:
getReleaseNotes() {
return this.http.get(this.url);
}
答案 0 :(得分:0)
您接近正确的语法,在这里只需稍作更改即可
this.data = this.releaseNotes.getReleaseNotes().subscribe(response => data.push(response));
Subscribe方法不返回ReleasenoteData
,而是返回订阅。
对其进行更改:
this.releaseNotes.getReleaseNotes().subscribe(response => this.data.push(response.results));
我不明白您为什么将服务响应分配给本地const data
。使用this.data
,删除any
并设置类型。
答案 1 :(得分:0)
您的响应的类型错误,您的界面模型仅具有ID和标题。 您需要进行类型转换或更改您的界面模型,以便它接受您的响应。
带有类型转换的解决方案:
response => data.push(new MatTableDataSource<ReleaseNoteData>(response as {id: number, title: string }))
引用此链接:
Typescript error: Argument of type 'Object' is not assignable to parameter of type '{}[]'
答案 2 :(得分:0)
您是否在“ this.releaseNotes.getReleaseNotes()”服务中使用HTTP调用?如果是这种情况,您可能需要先从响应中“提取”内容:
this.releaseNotes.getReleaseNotes()
.map((res: Response) => {
return res.json().results || {};
})
.subscribe(a => data.push(a))