javascript - Firebase JS - 永久离线存储

标签 javascript firebase

我正在使用 Angular 2、Electron 和 Firebase 开发应用程序。该应用程序主要是一个离线应用程序,可以选择在线同步。问题是,目前 Firebase 不支持在浏览器上永久存储。我想在离线时使用 PouchDB,并在连接时将其同步到 Firebase。但是,我觉得要使两个数据库的数据保持一致需要付出太多努力。那么,对于 Firebase 应用程序的永久离线存储,是否有更好的选择?一个例子也会非常棒。

最佳答案

AngularFire2Offline

我处于同样的情况并创建了一个缓存只读的库 AngularFire2供离线使用的数据。如果页面离线加载,它将使用 localstorage,并在可用时使用 Firebase 数据。

演示

基本用法

1。安装

npm install angularfire2-offline angularfire2 firebase --save

2。组件

import { Component } from '@angular/core';
import {
  AngularFireOffline,
  ListObservable,
  ObjectObservable } from 'angularfire2-offline';

@Component({
  selector: 'project-name-app',
  template: `
  <h1>{{ (info | async)?.name }}</h1>
  <ul>
    <li *ngFor="let item of items | async">
      {{ item?.name }}
    </li>
  </ul>
  `
})
export class MyApp {
  info: ObjectObservable<any>;
  items: ListObservable<any[]>;
  constructor(afo: AngularFireOffline) {
    this.info = afo.database.object('/info');
    this.items = afo.database.list('/items');
  }
}

3。模块

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AngularFireModule } from 'angularfire2';
import { AngularFireOfflineModule } from 'angularfire2-offline';

import { AppComponent } from './app.component';

// Must export the config
export const firebaseConfig = {
  apiKey: '<your-key>',
  authDomain: '<your-project-authdomain>',
  databaseURL: '<your-database-URL>',
  storageBucket: '<your-storage-bucket>'
};

@NgModule({
  declarations: [AppComponent],
  imports: [
    AngularFireModule.initializeApp(firebaseConfig),
    AngularFireOfflineModule.forRoot(),
    BrowserModule
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

关于javascript - Firebase JS - 永久离线存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40320633/

相关文章:

android - Google 登录产生 "Developer_Error"的 statusCode

javascript - 为什么我的 messaging.getToken() 在 firefox 中有效但在 chrome 中无效?

android - 用于检索数据的 Firebase 数据库引用

javascript - 如何从数据库中检索颜色到文本框中并在需要时更改

javascript - 如何将整个 GWT 包装在 div 中?

javascript - 有没有办法在没有用户事件的情况下触发 jQuery 的 live() 或 delegate() ?

javascript - 通过指令的两个自定义元素,页面上仅呈现一个

javascript - 如何防止 React 中整个组件的重新渲染?

swift - 如何在Firebase的数据库中反射(reflect)UISegmentedControl的选择结果

firebase - 为什么我的快照显示它包含数据?