Javascript http json数据打印到控制台,但不打印到爱奥尼亚3中的页面

Javascript http json数据打印到控制台,但不打印到爱奥尼亚3中的页面,javascript,json,angular,ionic-framework,ionic3,Javascript,Json,Angular,Ionic Framework,Ionic3,我知道这可能是一个简单的解决方案。我正在构建一个Ionic 3应用程序,能够连接到json数据文件并将对象打印到控制台,但我无法将项传递到我的搜索功能。我在页面上看到的错误是运行时错误-无法读取未定义的属性“filter”-我猜是因为该项不可用 data.ts import { Injectable } from "@angular/core"; import { Http } from "@angular/http"; import "rxjs/add/operator/map"; @Inj

我知道这可能是一个简单的解决方案。我正在构建一个Ionic 3应用程序,能够连接到json数据文件并将对象打印到控制台,但我无法将
传递到我的搜索功能。我在页面上看到的错误是
运行时错误-无法读取未定义的属性“filter”
-我猜是因为该项不可用

data.ts

import { Injectable } from "@angular/core";
import { Http } from "@angular/http";
import "rxjs/add/operator/map";

@Injectable()
export class Data {
  items: any;

  constructor(public http: Http) {
    this.http
      .get("./assets/data/plaques.json")
      .map(res => res.json())
      .subscribe(data => {
        this.items = data;
        console.log(data);
      });
  }

  filterItems(searchTerm) {
    return this.items.filter(item => {
      return (
        item.veteran_first.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1
      );
    });
  }
}

您正在尝试在初始化之前访问此.items

http.get是一个异步函数,当您访问
filterItems
时,可能无法设置此项


我强烈推荐阅读这本书,它将有助于更好地理解javascript的异步本质。

请您用
zone()
这样包装它:

this.zone.run(() => {
   this.items = data;
 });
这也可能有帮助: