Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何查找已完成项目的总长度?_Angular_Firebase_Firebase Realtime Database_Angularfire2_Angular5 - Fatal编程技术网

Angular 如何查找已完成项目的总长度?

Angular 如何查找已完成项目的总长度?,angular,firebase,firebase-realtime-database,angularfire2,angular5,Angular,Firebase,Firebase Realtime Database,Angularfire2,Angular5,如何查找已完成项目的总长度? 如何查找已完成的项目总数(TODO)?在项目列表中 如何在数组中查找某个对象的长度 <div>Todo List:</div> {{(items | async)?.length}} <-- Total Items in list <div>{{(items.completed | async)?.length}}</div> <!-- Total completed items? - length o

如何查找已完成项目的总长度?

如何查找已完成的项目总数(TODO)?在项目列表中 如何在数组中查找某个对象的长度

<div>Todo List:</div> {{(items | async)?.length}}  <-- Total Items in list

<div>{{(items.completed | async)?.length}}</div> <!-- Total completed items? - length of total completed items

<hr>

<ul *ngIf="todo_all">
    <li *ngFor="let item of items | async"  [class.completed]="item.completed">
        {{item.description}}
    </li>
</ul>


itemsRef: AngularFireList;
items: Observable<Todo[]>;

constructor(db: AngularFireDatabase) {
this.itemsRef = db.list('todos')
// Use snapshotChanges().map() to store the key
this.items = this.itemsRef.snapshotChanges().map(changes => {
return changes.map(c => ({ key: c.payload.key, ...c.payload.val() }));
});
}

Todo List:{{(items | async)?.length}实际上,您可以从现有的可观察对象中筛选客户端上的项,或者进行简单的查询以获取已完成的项

completedItemsCount: Observable<number>;
另一种方式:

this.completedItemsCount = db
.list('/todos', ref => ref.orderByChild('completed').equalTo(true))
.map(changes => {
    return changes.map(c => (
        { 
            key: c.payload.key,
            ...c.payload.val(),
        }
    )).length; // Eventually return the length
});
当然,如果你能将计数器保存在数据库中的某个地方,这样你就不必为了一个数字而首先得到整个列表,这当然会更好,但这可能会非常有效,除非你的待办事项列表非常庞大。如果是的话,第一次出现这个号码要花很多时间。我希望这有帮助

this.completedItemsCount = db
.list('/todos', ref => ref.orderByChild('completed').equalTo(true))
.map(changes => {
    return changes.map(c => (
        { 
            key: c.payload.key,
            ...c.payload.val(),
        }
    )).length; // Eventually return the length
});