4 votes

Angular / Firestore - Requête 'Where' renvoyant l'erreur 'property does not exist on type AngularFirestoreCollection' (la propriété n'existe pas sur le type AngularFirestoreCollection)

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);
  }

}

20voto

Eliran Pe'er Points 1381

Il n'y a pas de where fonction dans AngularFirestoreCollection au lieu de cela, vous devez fournir la condition where dans le deuxième argument de collection() comme ceci :

this.expensesCollection = this.db.collection('/expenses', ref => ref.where(expenseId', '==', this.expenseId));

Référence : https://github.com/angular/angularfire2/blob/master/docs/firestore/querying-collections.md

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X