Javascript 角形/火烧店-和#x27;其中';查询返回错误';类型AngularFirestoreCollection';上不存在属性;
我试图根据传入参数的URL参数从firestore集合中获取特定文档,但由于我已使用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
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模块之间的一个区别,如果我想有多个查询?