【问题标题】:Angularjs should I $rootScope data returned from firebase?Angularjs我应该从firebase返回$rootScope数据吗?
【发布时间】:2013-06-06 06:08:35
【问题描述】:

假设我想从 firebase 检索用户信息, 并且此用户信息将显示在多个路由/控制器中

我应该$rootScope返回的用户信息吗?

在每个控制器中调用下面的代码?

firebaseAuth.firebaseRef.child('/people/' + user.id).on('value', function(snapshot) {
  $scope.user = snapshot.val();
})

更新

我有一个带有getUserInfo() 功能的以下服务,那么最好的方法是什么 在几个控制器中使用它? 在每个控制器中调用firebaseAuth.getUserInfo().then()? 如果用户数据我必须在几个控制器中使用。我为什么不设置它$rootScope? 所以我不需要在不同的控制器中一次又一次地调用它。

myapp.service('firebaseAuth', ['$rootScope', 'angularFire', function($rootScope, angularFire) {
  this.firebaseRef = new Firebase("https://test.firebaseio.com");
  this.getUserInfo = function(id) {
    var userRef = this.firebaseRef.child('/human/' + id);
    var promise = angularFire(userRef, $rootScope, 'user', {});
    return promise;
  }
});

【问题讨论】:

  • 您可以在 Firebase 的官方 Angular 库 AngularFire 中找到一些工作示例。
  • @Kato 我认为我的问题不清楚含糊,我更新了。请再次检查。谢谢

标签: angularjs firebase angularjs-scope


【解决方案1】:

AngularFire 的重点是让您的 javascript 数据模型始终与 Firebase 保持同步。您不想每次需要获取数据时都创建一个新的 AngularFire 承诺。您只需初始化一次 AngularFire,您的本地数据将始终是最新的。

myapp.service('firebaseAuth', ['angularFireCollection', function(angularFireCollection) {
    this.firebaseRef = new Firebase("https://test.firebaseio.com");
    this.initUserInfo = function(id) {
        if (!this.userRef) {
            this.userRef = this.firebaseRef.child('/human/' + id);
            this.userInfo = angularFireCollection(this.userRef);
        }
        else {
            // already initialized
        }
    }
}]);

请记住,您的服务的所有属性(即您使用 this 关键字分配的所有内容)都可以从注入此服务的控制器中访问。所以你可以做console.log(firebaseAuth.userInfo)firebaseAuth.userRef.on('value', function(snap) { ... });之类的事情

此外,您最终可能希望使用FirebaseAuthClient 进行用户身份验证。

【讨论】:

  • 但是如果你直接使用firebaseAuth.userInfo访问。你如何分配 id 参数?
  • 您首先必须使用 firebaseAuth.initUserInfo(id)。你熟悉我声明函数的方式吗? var moose = function() { ... } 类似于 function moose() { ... }
【解决方案2】:

我建议创建一个服务来执行身份验证并存储用户数据。然后,您可以将服务注入任何需要访问用户的控制器。

【讨论】:

  • 我应该在哪里存储数据?变量?
猜你喜欢
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
相关资源
最近更新 更多