如何通过Angularfire或Firebase获取serverTimestamp

Lak*_*ker 1 angularfire2 angular

我找不到从Firestore获取serverTimestamp的方法。既可以使用Firestore本身,也可以使用angularfire。

我发现很多github问题与解决方案有关,这是行不通的。我猜那是因为版本不同吗?

"@firebase/app": "^0.1.10",
"angularfire2": "^5.0.0-rc.6.0",
"firebase": "^4.13.1",
Run Code Online (Sandbox Code Playgroud)

我尝试过的代码替代方法:

import * as firebase from 'firebase';
firebase.firestore.FieldValue.serverTimestamp();
Run Code Online (Sandbox Code Playgroud)

错误TypeError:无法读取未定义的属性'FieldValue'

import * as firebase from 'firebase';
firebase.database.ServerValue.TIMESTAMP;
Run Code Online (Sandbox Code Playgroud)

错误TypeError:无法读取未定义的属性'ServerValue'

constructor( private afs: AngularFirestore ) { }
this.afs.firestore.FieldValue.serverTimestamp();
Run Code Online (Sandbox Code Playgroud)

类型“ FirebaseFirestore”上不存在属性“ FieldValue”。

Nab*_*bel 7

自 firebase 8.0.0 起,如何导入 firebase发行说明发生了重大变化

在您导入之前

import * as firebase from 'firebase/app'
Run Code Online (Sandbox Code Playgroud)

但现在,你应该导入

import firebase from 'firebase/app'
Run Code Online (Sandbox Code Playgroud)

然后,您仍然应该仅导入 firestore 来访问服务器时间戳

import firebase from 'firebase/app'
import 'firebase/firestore'
Run Code Online (Sandbox Code Playgroud)

并在您的应用程序中使用

firebase.firestore.FieldValue.serverTimestamp()
Run Code Online (Sandbox Code Playgroud)


小智 5

我在我的项目中有这个工作:

import { AngularFirestore } from 'angularfire2/firestore';
import { CollectionReference, Query } from '@firebase/firestore-types'; // Not usefull for your problem
import * as firebase from 'firebase';

@Injectable()
export class MyService {

  constructor(private db: AngularFirestore) {
      console.log("firebase.firestore.FieldValue.serverTimestamp()");
      console.log(firebase.firestore.FieldValue.serverTimestamp());
  }
}
Run Code Online (Sandbox Code Playgroud)

在我的包裹中:

"firebase": "^4.12.1",
"angularfire2": "^5.0.0-rc.5-next"
Run Code Online (Sandbox Code Playgroud)

我在packages.json文件中没有这个:

“@firebase/应用程序”


Lak*_*ker 5

最后有帮助的是卸载与 firebase 相关的所有内容,所以正如我在我的问题中提到的:

"@firebase/app": "^0.1.10",
"angularfire2": "^5.0.0-rc.6.0",
"firebase": "^4.13.1",
Run Code Online (Sandbox Code Playgroud)

npm install firebase angularfire2 --save再次运行。

这给了我:

"angularfire2": "^5.0.0-rc.7",
"firebase": "^5.0.1",
Run Code Online (Sandbox Code Playgroud)

这解决了我所有的问题。

将 firebase 导入为:

import * as firebase from 'firebase';
Run Code Online (Sandbox Code Playgroud)

时间戳代码本身:

get timestamp() {
  return firebase.firestore.FieldValue.serverTimestamp();
}
Run Code Online (Sandbox Code Playgroud)

11 月 17 日编辑:如果您使用前面提到的 import import * as firebase from 'firebase';,您将在开发人员控制台中收到此警告:

看起来您正在使用 Firebase JS SDK 的开发版本。将 Firebase 应用部署到生产环境时,建议仅导入您打算使用的各个 SDK 组件。

对于模块构建,这些可以通过以下方式使用(替换为组件的名称 - 即身份验证、数据库等):

CommonJS 模块:const firebase = require('firebase/app'); require('firebase/');

ES 模块:从“firebase/app”导入 firebase;导入'firebase/';

打字稿:从“firebase/app”导入 * 作为 firebase;导入'firebase/';

所以改成:

import * as firebase from 'firebase/app';
import 'firebase/firestore';
Run Code Online (Sandbox Code Playgroud)


Ike*_*Eze 5

只做:

import * as firebase from 'firebase';
Run Code Online (Sandbox Code Playgroud)

导入所有Firebase模块,这不是生产的好习惯。最佳做法是像这样使用裸导入:

import * as firebase from 'firebase/app'; 
import 'firebase/firestore';
Run Code Online (Sandbox Code Playgroud)

这只会将Firestore模块导入您的应用中。然后,您可以执行以下操作:

get timestamp() {
return firebase.firestore.FieldValue.serverTimestamp();
};
Run Code Online (Sandbox Code Playgroud)


小智 5

进口

import firebase from 'firebase/app';
Run Code Online (Sandbox Code Playgroud)

firebase.firestore.FieldValue.serverTimestamp();
Run Code Online (Sandbox Code Playgroud)