无法将数据传递给MatTableDataSource

时间:2018-10-16 08:35:31

标签: angular

我有一项服务,该服务从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);
  }

3 个答案:

答案 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))