J'essaie d'obtenir un document spécifique à partir d'une collection firestore en fonction d'un paramètre URL qui est passé dans l'argument, mais comme j'ai initialisé la collection à l'aide de expensesCollection: AngularFirestoreCollection<Expense>
, le where
renvoie l'erreur suivante :
TS2339 : La propriété 'where' n'existe pas sur le type 'AngularFirestoreCollection
Le composant "ViewExpense" est accessible après avoir cliqué sur une ligne de données du composant "ExpensesList", qui transmet l'identifiant de la dépense en tant que paramètre, utilisé dans la requête "where".
-
liste-de-frais.component.html :
<mat-row *matRowDef="let row; columns: tableColumns" routerLink="/expenses/view/{{row.expenseId}}"></mat-row>
-
view-expense.component.ts :
import { Component, OnInit, Input } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Observable } from 'rxjs/Observable';
import { AngularFireDatabase } from 'angularfire2/database';
import { AngularFirestore, AngularFirestoreCollection } from 'angularfire2/firestore';
import { Expense } from '../expenseModel';
@Component({
selector: 'app-view-expense',
templateUrl: './view-expense.component.html',
styleUrls: ['./view-expense.component.scss']
})
export class ViewExpenseComponent implements OnInit {
expenseId: any;
expensesCollection: AngularFirestoreCollection<Expense>;
expenses: Observable<Expense[]>;
expense: Observable<Expense>;
constructor(private db: AngularFirestore, private route: ActivatedRoute) {
this.route.params.subscribe(params => {
console.log(params);
this.expenseId = params.expenseId;
})
this.expensesCollection = this.db.collection('/expenses');
this.expenses = this.expensesCollection.snapshotChanges().map(changes = {
return changes.map(a => {
const data = a.payload.doc.data() as Expense;
data.id = a.payload.doc.id;
return data;
})
})
}
ngOnInit() {
this.getExpense();
}
getExpense() {
/* ---- ERROR HERE ---- */
this.expense = this.expensesCollection.where('expenseId', '==', this.expenseId);
console.log('this.expense: ' + this.expense);
}
}