无法达到对象AngularFire2 / Typescript的属性

时间:2018-06-22 15:01:57

标签: typescript ionic-framework angularfire2

我在项目中添加了一个搜索栏,并从离子文档中获取了代码

 getItems(ev: any) {

    this.initializeItems();

    const val = ev.target.value;

    if (val && val.trim() != '') {
      this.items = this.items.pipe(filter(item => {
        console.log(item);
        let t = item.title;
        return (t.toLowerCase().indexOf(val.toLowerCase()) > -1);
      }))
    }
  }

这就是我初始化项目的方式

initializeItems(){
    this.items = this.newslist;
  }

在构造函数中

this.newslist = afDB.list('information/news', (ref) => ref.orderByChild('inverteddatetime')).snapshotChanges().pipe(
        map(actions => 
          actions.map(a => ({ key: a.key, ...a.payload.val() }))
        )
      );

我遇到的错误是在let t = item.title;处,其中“标题”用红色下划线标出了消息

  

类型{}上不存在属性“标题”

当我在console.log(item);中登录项目时,尽管具有适当的属性,但仍可以得到正确的结果:

    (2) [{…}, {…}] 
0:{
datetime:"Saturday, June 23, 2018 12:28 AM"
image:"data:image/jpeg;base64,/9j/4..."
inverteddatetime:-1529703181246
key:"-LFdPXgxgAQA1RVnGmMD"
subtitle:"Water can cause problems, be wary of the things."
text:"Water quality is a subject that’s been big news lately. Residents of Flint, Michigan are suffering from toxic levels of lead in ..."
title:"12 Toxins in Your Drinking Water"
}

1 : {key: "-LFXmks2UICxqTNkicNv", datetime: "Thursday, June 21, 2018 5:35 PM",  subtitle: "Unfortunate problems", …} length : 2
    __proto__ : Array(0)

数据结构: Firebase Data Structure(我的信誉不足,无法在线程上显示它)

我有一个简单的问题,我不明白为什么我无法访问该项目的属性“标题”,尽管在登录时它会显示所有项目及其属性。是因为它返回了JSON,我应该将其映射到数组吗?

1 个答案:

答案 0 :(得分:0)

这是由于键入脚本不“知道”对象的数据形状(在这种情况下为“ item”)而发生的类型错误。 通常,您将要键入它并对其进行解析,如下所示:

let t = (item as any).title

但是在您的情况下,您似乎正在尝试类似地应用过滤器来解决此问题: Observable of array with filter using Angular 5 with RxJS

您的解决方案应该与1:1类似:将.map应用于您拥有的可观察对象(this.items.map(etc))

赞:

getItems(ev: any) {

    this.initializeItems();

    const val = ev.target.value;

    if (val && val.trim() != “”) {
      this.items = this.items.map( items => items.filter( item => :::your filter condition here:::))
  }
}