我正在使用AngularFire2而且无法将查询部分删除。 " limitToLast:1"正在返回所有内容,而不仅仅是我最近的条目。我需要一种方法来顺序编号我的工作,我正在尝试获取最新的jobID(4)所以我可以添加+ 1并使下一个工作5。
job: FirebaseObjectObservable<any>;
test: any;
constructor(af: AngularFire) {
this.job = af.database.object('/jobs/', {
query:{ limitToLast: 1 }
});
};
createNewJob(){
this.job.subscribe(snap => {
this.test = snap;
});
}
我没有输出单个最近的条目,而是获得了所有内容:
[ null,
{ "customer": "Heather D", "description": "Work needs to be done" },
{ "customer": "Quick G", "description": "Unclog toilet" },
{ "customer": "Justin S", "description": "Do everything for everyone" }
{ "customer": "Jeff F", "description": "Ikea furniture" }
]
HTML
<button (click)="createNewJob()"> Create </button>
{{ test | json }}
这是我的结构
ROOT
jobs
1
customer: "Heather D"
description: "Work needs to be done"
2
customer: "Quick G"
description: "Unclog toilet"
3
customer: "Justin S"
description: "Do everything for everyone"
4
customer: "Jeff F"
description: "Ikea furniture"
更新1:
仍有同样的问题,但我觉得这是朝着正确方向迈出的一步。如果我错了,请纠正我。我现在给我的工作一个独特的ID,这对我来说似乎是多余的,但新结构看起来像这样:
ROOT
jobs
1
customer: "Heather D"
description: "Work needs to be done"
id: 1
2
customer: "Quick G"
description: "Unclog toilet"
id: 2
3
customer: "Justin S"
description: "Do everything for everyone"
id: 3
4
customer: "Jeff F"
description: "Ikea furniture"
id: 4
然后我改变了我的疑问:
query:{ orderByChild: 'id', limitToLast: 1 }
同样的结果,仍然不仅限于一项工作。
答案 0 :(得分:0)
为什么不按作业ID的降序对记录进行排序并将其限制为第一个?这将为您提供最后一条记录
答案 1 :(得分:0)
问题是您使用的是object
而不是list
。使用query
时,将忽略object
选项。也就是说,你应该使用这样的东西:
job: FirebaseListObservable<any>;
test: any;
constructor(af: AngularFire) {
this.job = af.database.list('/jobs/', {
query:{ limitToLast: 1 }
});
};
FirebaseListObservable
应该发出一个包含最后一个作业的数组。
但是,使用FirebaseListObservable
实例的push
方法更安全,而不是阅读然后递增上一个作业ID。另请参阅Saving Lists of Data:
使用数据列表时
push()
可确保按时间顺序排列。您可能很想使用事务来生成自己的密钥,但推送是一个更好的选择。交易更慢,更复杂。他们需要一次或多次往返服务器。客户端上push()
生成的密钥在脱机时工作,并针对性能进行了优化。