Как получить временную метку сервера Firebase?

Я хочу сохранить дату на сервере firebase с отметкой времени, сгенерированной сервером, с помощью модуля Firebase «Firebase.ServerValue.TIMESTAMP».

Как настроить импорт Firebase в качестве модуля в проект angular2.

Я использую Angular2, angular-cli, angularFire2 и т. д. Ниже приведены параметры конфигурации.

System-config.ts
/** Map relative paths to URLs. */
const map: any = {
    firebase: 'vendor/firebase/lib/firebase-web.js',
    angularfire2: ' vendor/angularfire2'
};
/** User packages configuration.*/
const packages: any = {
      angularfire2: {
        defaultExtension: 'js',
        main: 'angularfire2.js'
      }
};

angular-cli-build.js

/* global require, module */
var Angular2App = require('angular-cli/lib/broccoli/angular2-app');
module.exports = function(defaults) {
  return new Angular2App(defaults, {
    vendorNpmFiles: [
      'systemjs/dist/system-polyfills.js',
      'systemjs/dist/system.src.js',
      'zone.js/dist/**/*.+(js|js.map)',
      'es6-shim/es6-shim.js',
      'reflect-metadata/**/*.+(js|js.map)',
      'rxjs/**/*.+(js|js.map)',
      '@angular/**/*.+(js|js.map)',

      // below are the AngularFire entries
      'angularfire2/**/*.js',
      'firebase/lib/*.js'      
    ]
  });
};

person ravi    schedule 06.06.2016    source источник
comment
ты решил это? Я видел github.com/angular/angularfire2/issues/211, но не уверен как реализовать. Если у вас есть решение, не могли бы вы опубликовать его, пожалуйста?   -  person dibs    schedule 18.07.2016
comment
Я решил проблему, переключившись на API firebase 3. На самом деле я задал этот вопрос разработчикам, и они указали мне на последнюю версию API. Какую версию firebase вы используете?   -  person ravi    schedule 18.07.2016
comment
Я не уверен, так как я все еще просто обдумываю все эти вещи angular/firebase, но это из package.json: angularfire2: ^ 2.0.0-beta.0   -  person dibs    schedule 19.07.2016
comment
И у меня есть firebase: ^ 2.4.2,   -  person dibs    schedule 19.07.2016
comment
Взгляните на пример приложения Todo, созданного с помощью Angular2 и AngularFire2 github.com/r-park/ todo-angular2-firebase. После настройки вы увидите, что временные метки сохраняются в базе данных Firebase.   -  person ravi    schedule 19.07.2016


Ответы (2)


Используя Angularfire2, Angular 2 и angular-cli, у меня сработало следующее решение.

Во-первых, обязательно импортируйте firebase с помощью:

import * as firebase from 'firebase';

Далее используйте старый способ получения метки времени, например:

let dateNow = firebase.database.ServerValue.TIMESTAMP;
console.log(dateNow);

Наконец, откройте src/typings.d.ts и добавьте:

declare namespace firebase.database.ServerValue {
  let TIMESTAMP: any;
}

Последняя часть помогла мне и отличалась от большинства решений, которые не используют специальную настройку OP.

person Jason Simpson    schedule 02.11.2016
comment
Он по-прежнему возвращает объект, и у меня нет файла src/typings.d.ts в моем приложении, я также использую angular 2. Есть идеи - person Master Yoda; 05.05.2017

В качестве обходного пути вы можете использовать {'.sv': 'timestamp'}

db.object('path').set({ timestamp: {'.sv': 'timestamp'}}) // angular

firebase.database.ServerValue.TIMESTAMP == {'.sv': 'timestamp'}

person John    schedule 24.10.2018
comment
Это решение позволяет избежать импорта firebase в компонент в Angular. - person Constantin Konstantinidis; 16.03.2021