【问题标题】:Access multiple Realtime Databases of the same firebase app project访问同一 Firebase 应用项目的多个实时数据库
【发布时间】:2018-05-19 05:59:11
【问题描述】:

我发现了一些explanations 关于使用 angularfire2 连接来自不同应用项目的多个数据库的信息。但我想访问同一项目中的数据库

documentation 声明:

// Get the default database instance for an app
var database = firebase.database();

// Get a secondary database instance by URL
var database = firebase.database('https://testapp-1234.firebaseio.com');

如何用 angularfire2 做到这一点?

【问题讨论】:

    标签: firebase-realtime-database angularfire2


    【解决方案1】:

    我知道你在这里得到了一个有效的答案:https://github.com/angular/angularfire2/issues/1567

    测试:“angularfire2”:“^5.0.0-rc.6.0”,“firebase”:“^4.12.1”

    我构建了一个极简包装,灵感来自我想分享的 #1567。使用多个数据库有两种不同或相同项目的方法。

    你可能会使用第一个,我不太明白在多个项目中使用多个数据库的意义。

    @Injectable()
    export class AngularFireWrapper {
    
      // Default database 
      private _firebaseDb = this.afDb.database;
    
      constructor(private afDb: AngularFireDatabase,
                  @Optional() dbName: string) {
    
        console.log('Hello AngularFireWrapper, db :', dbName || 'default');
    
        // 1st Method, same project, same auth
        // environment.dbUrls = {
        //   ...
        //   otherDb: 'https://DB_NAME_SAME_PROJECT.firebaseio.com/'
        // }
    
        if (dbName && environment.dbUrls[dbName]) {
          const app: any = this.afDb.app;
          this._firebaseDb = app.database(environment.dbUrls[dbName]);
        }
    
        // 2nd Method, other project, different auth =/
        // environment.dbConfigs = {
        //   ...
        //   otherDb: {...} // usual firebase configs 
        // }
    
        if (dbName && environment.dbConfigs[dbName]) {
          this._firebaseDb = firebase.initializeApp(environment.dbConfigs[dbName], dbName)
            .database();
        }
      }
    
      db(dbName): AngularFireWrapper {
        return new AngularFireWrapper(this.afDb, dbName);
      }
    
      object(path: string): AngularFireObject<any> {
        const ref = this._firebaseDb.ref(path);
        return this.afDb.object(ref);
      }
    
      list(path: string, queryFn?: QueryFn): AngularFireList<any> {
        const ref = this._firebaseDb.ref(path);
        return this.afDb.list(ref, queryFn);
      }
    }
    

    复制粘贴,像往常一样使用自定义服务注入它,然后:

    export class MyApp {
      constructor(private afW: AngularFireWrapper) {
    
        this.afW.object('test')
          .valueChanges()
          .subscribe(console.log)
        // => output default db values
    
        this.afW.db('otherDb').object('test')
          .valueChanges()
          .subscribe(console.log)
        // => output otherDb values
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2016-10-18
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多