使用@angular/fire@6.0.3 无法访问firebase.firestore.FieldValue.serverTimestamp()
Posted
技术标签:
【中文标题】使用@angular/fire@6.0.3 无法访问firebase.firestore.FieldValue.serverTimestamp()【英文标题】:Using @angular/fire@6.0.3 Unable to access firebase.firestore.FieldValue.serverTimestamp() 【发布时间】:2021-02-16 14:01:10 【问题描述】:我一直在尝试将时间戳字段添加到我的 Firestore 文档中。
我还分享了一个包含相关代码的 PDF。
项目环境为 Ionic 6.12.0。
尝试访问 Firestore.FieldValue.serverTimestamp()
import Injectable from '@angular/core';
import AngularFirestore from '@angular/fire/firestore';
import firebase from '@firebase/app';
@Injectable(
providedIn: 'root'
)
export class FireTimestampService
constructor(private afs: AngularFirestore)
timestamp(): any
return this.afs.FieldValue.serverTimestamp();
timestamp2(): any
return firebase.firestore.FieldValue.serverTimestamp();
firestore 可访问后的实际使用情况:
import Injectable from '@angular/core';
import AngularFirestore, AngularFirestoreDocument from '@angular/fire/firestore';
import * as firebase from 'firebase';
@Injectable(
providedIn: 'root'
)
type DocPredicate<T> = string | AngularFirestoreDocument<T>;
export class FireTimestampService
constructor(private afs: AngularFirestore)
doc<T>(ref: DocPredicate<T>): AngularFirestoreDocument<T>
return typeof ref === 'string' ? this.afs.doc<T>(ref) : ref;
timestamp(): any
return firebase.firestore.FieldValue.serverTimestamp();
set<T>(ref: DocPredicate<T>, data: any )
const timestamp = this.timestamp;
return this.doc(ref).set(
...data,
updatedAt: timestamp,
createdAt: timestamp
);
我的节点模块列表: ├── @angular-devkit/build-angular@0.1000.8 ├── @angular/cli@10.0.8 ├── @angular/common@10.0.14 ├── @angular/compiler-cli@10.0.14 ├── @angular/compiler@10.0.14 ├── @angular/core@10.0.14 ├── @angular/fire@6.0.3 ├── @angular/forms@10.0.14 ├── @angular/language-service@10.0.14 ├── @angular/platform-browser-dynamic@10.0.14 ├── @angular/platform-browser@10.0.14 ├── @angular/router@10.0.14 ├── @capacitor/android@2.4.2 ├── @capacitor/cli@2.4.2 ├── @capacitor/core@2.4.2 ├── @capacitor/ios@2.4.2 ├── @ionic-native/core@5.29.0 ├── @ionic-native/splash-screen@5.29.0 ├── @ionic-native/status-bar@5.29.0 ├── @ionic/angular-toolkit@2.3.3 ├── @ionic/angular@5.4.1 ├── @types/jasmine@3.5.14 ├── @types/jasminewd2@2.0.8 ├── @types/node@12.19.1 ├── codelyzer@6.0.1 ├── firebase@7.24.0 ├── jasmine-core@3.5.0 ├── jasmine-spec-reporter@5.0.2 ├── karma-chrome-launcher@3.1.0 ├── karma-coverage-istanbul-reporter@3.0.3 ├── karma-jasmine-html-reporter@1.5.4 ├── 业力茉莉@3.3.1 ├── 业力@5.0.9 ├── 量角器@7.0.0 ├── rxjs@6.5.5 ├── ts-node@8.3.0 ├── tslib@2.0.3 ├── tslint@6.1.3 ├── typescript@3.9.7 └── zone.js@0.10.3
【问题讨论】:
【参考方案1】:您可以从 firestore 获取时间戳:
import firestore from 'firebase';
// ...
const timestamp = firestore.Timestamp.now();
https://firebase.google.com/docs/reference/js/firebase.firestore.Timestamp#static-now
【讨论】:
卢卡斯,我得到:看起来您正在使用 Firebase JS SDK 的开发版本。将 Firebase 应用部署到生产环境时,建议仅导入您打算使用的单个 SDK 组件。对于模块构建,可以通过以下方式使用(将感谢卢卡斯让我走上正确的道路。
使用 import firestore from 'firebase';
我收到以下警告:
您似乎正在使用 Firebase JS SDK 的开发版本。 将 Firebase 应用部署到生产环境时,建议仅导入 您打算使用的各个 SDK 组件。
对于模块构建,这些可以通过以下方式获得 (替换为组件的名称 - 即身份验证、数据库等):
打字稿:
import * as firebase from 'firebase/app';
import 'firebase/<PACKAGE>';
有了提示,我累了:
import * as firebase from 'firebase/app';
功能:
getTimestamp()
return firebase.firestore.Timestamp.now();
伙计们:有问题
It does not work with @angular/fire 6.0.4 + firebase 8.0.0
It works with @angular/fire 6.0.3 + firebase 7.24.0
再次感谢卢卡斯。
【讨论】:
以上是关于使用@angular/fire@6.0.3 无法访问firebase.firestore.FieldValue.serverTimestamp()的主要内容,如果未能解决你的问题,请参考以下文章
const commandFolders = readdirSync('./commands'); ReferenceError:在 Object.<anonymous> 初始化之前无法访