使用@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-b​​rowser-dynamic@10.0.14 ├── @angular/platform-b​​rowser@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 组件。对于模块构建,可以通过以下方式使用(将 替换为组件的名称 - 即 auth、数据库等): Typescript: import * as firebase from 'firebase/app';导入'firebase/'; —————— 我正在从您的建议中得到结果。警告的任何修复? 卢卡斯,关于如何使用 @angular/fire 6.0.4 和 firebasae 8.0.0 访问相同的任何想法【参考方案2】:

感谢卢卡斯让我走上正确的道路。

使用 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()的主要内容,如果未能解决你的问题,请参考以下文章

RUN命令无法访问卷

const commandFolders = readdirSync('./commands'); ReferenceError:在 Object.<anonymous> 初始化之前无法访

智能访客机操作简单

mac cmd 打开访达

使用iptables基于MAC地址进行访控

博客作业之采访