Firebase Firestore get() 不工作
Posted
技术标签:
【中文标题】Firebase Firestore get() 不工作【英文标题】:Firebase Firestore get() not working 【发布时间】:2018-05-28 23:58:00 【问题描述】:它不喜欢的部分是 ngOnInit() 中的 get() 方法。 是说,“[ts] 属性 'get' 在类型 'AngularFirestoreDocument' 上不存在。”
我看过这里:https://firebase.google.com/docs/firestore/query-data/get-data 它显示对单个文档使用 get() 方法,但我不喜欢这种方法?
import Component, OnInit, Pipe from '@angular/core';
import FormBuilder, FormGroup, Validators from '@angular/forms';
import Router, ActivatedRoute from '@angular/router';
import AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument from 'angularfire2/firestore';
import Observable from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import User from './user';
@Component(
selector: 'user-form',
templateUrl: 'user-form.component.html'
)
export class UserFormComponent implements OnInit
form: FormGroup;
title: string;
user = new User();
id;
userDoc: AngularFirestoreDocument<User>;
singleUser: Observable<User>;
constructor(fb: FormBuilder, private afs: AngularFirestore, private _router: Router, private _route: ActivatedRoute)
//
this.form = fb.group(
//username: ['', Validators.required],
email: ['', Validators.required],
title: ['', Validators.required]
)
ngOnInit()
this.title = "Update User";
this._route.params.subscribe(params =>
this.id = params["id"];
);
if(!this.id)
console.log("New User");
else
this.afs.collection("users").doc(this.id)
.get().then(function(doc)
if (doc.exists)
console.log("Document data:", doc.data());
else
console.log("No such document!");
).catch(function(error)
console.log("Error getting document:", error);
);
//
submit()
console.log(this.user.title + " - " + this.user.email);
if (this.id)
this.afs.doc('users/' + this.id).update(
title: this.user.title,
email: this.user.email
); ;
else
this.afs.collection('users').add(
name: this.user.title,
email: this.user.email
);
this._router.navigate(['']);
【问题讨论】:
如果你检查link更多细节,你会发现它返回firebase.firestore.DocumentReference
,但你现在使用的是angularfire2
。
【参考方案1】:
其实
AngularFirestoreDocument<>
没有get
属性, 改用AngularFirestoreDocument<>.ref
:
this.afs.collection("users")
.doc(this.id)
.ref
.get().then(function(doc)
if (doc.exists)
console.log("Document data:", doc.data());
else
console.log("No such document!");
).catch(function(error)
console.log("Error getting document:", error);
);
【讨论】:
嗯,你是对的,但我在文献中的任何地方都没有看到这一点?我应该做些不同的事情吗? 你能看到我的变化吗?刚刚添加了doc('xxxId').ref.get()
。
我的意思是我在这里看不到它:firebase.google.com/docs/firestore/query-data/get-data - 你怎么知道的?我应该怎么做才能不必使用 .ref?
没错,该文档将所有内容作为javascript SDK
进行引导,但您使用的是为angular
项目定制的angularfire2
。
哇,如果我不得不到这里来找出答案,那真是糟糕的文档写作。浪费了一些美好的时间来挠头并四处寻找【参考方案2】:
您使用的是 Angular Fire,因此语法如下:
this.afs.collection("users").doc(this.id).valueChanges(user =>
console.log(user);
);
在此处阅读文档:https://github.com/angular/angularfire2
【讨论】:
以上是关于Firebase Firestore get() 不工作的主要内容,如果未能解决你的问题,请参考以下文章
Firebase Firestore get() 快照在第二次查询时冻结
如何使用 Firebase Firestore 获取子集合? [复制]
Firebase 存储规则在 Firestore 文档上查找数据? [复制]