AngularFire2与Firebase JS

时间:2017-03-22 14:26:09

标签: angularjs angular firebase angularfire2

我发现AngularFire2库文档很少,很难使用。我有一个angular2应用程序,并想知道是否有人可以帮助我清除使用vanilla JS Firebase代码而不是angularfire2的优点/缺点?使用vanilla JS版本会杀掉我可能正在使用的angular2功能吗?我很困惑为什么使用一个而不是另一个,个人的香草JS一个是更好的记录和功能丰富,我甚至看不到如何在AngularFire2中注册用户,它没有任何UI元素和可观察到的是尽我所能!

1 个答案:

答案 0 :(得分:0)

您可以直接使用vanilla版本。即使有可观察性 - 可观察和承诺也能很好地协同工作。例如:

Observable.of(new firebase.auth.GoogleAuthProvider())
  .switchMap(o => firebase.app().auth().signInWithPopup(o))
  .subscribe()

AngularFire2的主要优点是令人头疼的observables(;我建议你学习rxjs并开始使用它们而不是promises。我使用vanilla JS SDK,但是,我根据AngularFire2的作用创建了refObservable FirebaseObservables。它更简单,但足以满足我的需求:

export function refObservable(ref): Observable<firebase.database.DataSnapshot> {
  return Observable.create(observer => {
    let fn;
    try {
      fn = ref.on('value', snapshot => {
        observer.next(unwrapSnapshot(snapshot));
      });
    } catch (error) {
      observer.error(error);
    }
    return () => ref.off('value', fn);
  });
};

其中unwrapSnapshot(snapshot)是一个简单的函数,用于检查快照并返回适当的结果(数组,对象,字符串等等)。我用它来从firebase读取数据。我直接创建/更新/删除操作:

Observable.of(checkUserPermission())
  .switchMap(() => {
    return firebase.database().ref('what/ever').remove();
  });

它与其他模块类似 - 存储,消息传递,身份验证...我更喜欢Firebase SDK而不是AngularFire2。我还发现在服务/网络工作者中使用它更容易。

  • 如果你已经知道香草sdk,坚持下去。
  • 如果您只需要数据库读/写和基本身份验证,请使用AngularFire2,这样更简单。
  • 如果您需要更多控制firebase功能,请使用JS SDK。