我在项目中添加了一个搜索栏,并从离子文档中获取了代码
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,我应该将其映射到数组吗?
答案 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:::))
}
}