【问题标题】:Property 'filter' does not exist on type 'Object'. When trying to filter response“对象”类型上不存在属性“过滤器”。尝试过滤响应时
【发布时间】:2018-11-26 16:35:41
【问题描述】:

我试图从一个 json 文件中获取与 url 中播放器名称相同的数据。例如:localhost:4200/players/Febiven 应该只返回有关 Febiven 的信息。我正在使用 Angular 6

到目前为止,我有这个代码:

player.service.ts

  get(ingameName){
    return <Observable<Player>> this.http.get(endpoint).map(response =>{
        let data = response.filter(item=>{
          if (item.ingameName == ingameName) {
            return item
          }
        });
        if (data.length == 1){
          return data[0]
        }
        return {}
      })
      .catch(this.handleError)
  }

  private handleError(error:any, caught:any): any{
    console.log(error, caught)
  }

玩家信息.component.ts

 export interface Player {
  ingameName: string;
  name: string;
  intro: string;
  image: string;
  info: string;
  team: string;
  dob: string;
  earnings: string;
  role: string;
  game: string;
  favourite: string;
  IDs: string;

}

export class PlayerInfoComponent implements OnInit {
  players: Player[] = null;
  private routeSub:any;
  private req:any;
  ingameName:string;
  player : player;


  constructor(private route: ActivatedRoute, private plService : PlayerService) { }

  ngOnInit() {
    this.routeSub = this.route.params.subscribe(params => {
      this.ingameName = params['ingameName'];
      this.req = this.plService.get(this.ingameName).subscribe(data=>{
        this.player = data as player
      })
    });

我收到错误“属性”过滤器在“对象”类型上不存在。而且我真的不知道如何解决这个问题,我查看了多个答案,但似乎没有一个对我有用。如果有人可以帮助我解决这个错误,那就太好了

谢谢

【问题讨论】:

标签: html angular typescript http


【解决方案1】:

filter 仅存在于数组中。您的响应是一个对象。你可以这样做:

get(ingameName){
    return <Observable<Player>> this.http.get(endpoint).map(response =>{
        let data = response.json();
        if (data.ingameName == ingameName){
           return data;
        }
        return {};
    })
    .catch(this.handleError)
}

【讨论】:

    【解决方案2】:

    试试这个会奏效: 在您的类中定义一个参数并在 ngOnInit() 函数中使用它,如下所示:

    export class VideoDetailComponent implements OnInit, OnDestroy {
      data_new:any;
      
      ngOnInit() {
        this.http.get("assets/json/videos.json").subscribe(data =>{
            this.data_new = data;
              this.data_new.filter(item=>{
                console.log(item)
                // do your work here
              })
    
          })
          }
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-11
      • 2019-04-24
      • 2017-05-23
      • 2020-02-15
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 2015-12-06
      相关资源
      最近更新 更多