Javascript 角形/火烧店-和#x27;其中';查询返回错误';类型AngularFirestoreCollection';上不存在属性;

Javascript 角形/火烧店-和#x27;其中';查询返回错误';类型AngularFirestoreCollection';上不存在属性;,javascript,angular,firebase,firebase-realtime-database,google-cloud-firestore,Javascript,Angular,Firebase,Firebase Realtime Database,Google Cloud Firestore,我试图根据传入参数的URL参数从firestore集合中获取特定文档,但由于我已使用ExpenseCollection:AngularFirestoreCollection初始化集合,因此where查询返回以下错误: TS2339:类型“AngularFirestoreCollection”上不存在属性“where” 单击“ExpensesList”组件上的datatable行后,即可访问“ViewExpense”组件,该组件将费用ID作为参数传递,用于where查询 - 费用清单.compon

我试图根据传入参数的URL参数从firestore集合中获取特定文档,但由于我已使用
ExpenseCollection:AngularFirestoreCollection
初始化集合,因此
where
查询返回以下错误:

TS2339:类型“AngularFirestoreCollection”上不存在属性“where”

单击“ExpensesList”组件上的datatable行后,即可访问“ViewExpense”组件,该组件将费用ID作为参数传递,用于where查询

-

费用清单.component.html:

<mat-row *matRowDef="let row; columns: tableColumns" routerLink="/expenses/view/{{row.expenseId}}"></mat-row>
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);
  }

}

-

查看费用.组件.ts:

<mat-row *matRowDef="let row; columns: tableColumns" routerLink="/expenses/view/{{row.expenseId}}"></mat-row>
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);
  }

}
从'@angular/core'导入{Component,OnInit,Input};
从'@angular/router'导入{ActivatedRoute};
从“rxjs/Observable”导入{Observable};
从“angularfire2/database”导入{AngularFireDatabase};
从“angularfire2/firestore”导入{AngularFirestore,AngularFirestoreCollection};
从“../expenseModel”导入{Expense};
@组成部分({
选择器:“应用程序视图费用”,
templateUrl:“./view expense.component.html”,
样式URL:['./查看费用.component.scss']
})
导出类ViewExpenseComponent实现OnInit{
费用化:任何;
费用收款:AngularFirestoreCollection;
费用:可观察;
费用:可观察;
构造函数(专用数据库:AngularFirestore,专用路由:ActivatedRoute){
this.route.params.subscribe(params=>{
控制台日志(params);
this.expenseId=params.expenseId;
})
this.expensesCollection=this.db.collection(“/expenses”);
this.expenses=this.expensesCollection.snapshotChanges().map(更改={
返回changes.map(a=>{
const data=a.payload.doc.data()作为费用;
data.id=a.payload.doc.id;
返回数据;
})
})
}
恩戈尼尼特(){
这个.getExpense();
}
getExpense(){
/*----此处出错----*/
this.expense=this.expensesCollection.where('expenseId','=',this.expenseId);
console.log('this.expense:'+this.expense);
}
}

AngularFirestoreCollection
中没有
where
函数,您应该在
collection()的第二个参数中提供where条件,如下所示:

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


过时/完全错误的文档:

@mikegross您链接的文档是正确的。这是您正在使用的AngularFirestore NPM模块和vanilla Firebase JS SDKWhat模块之间的一个区别,如果我想有多个查询?