firebase onAuth()抛出:TypeError无法读取属性' auth'未定义的

时间:2014-10-23 12:51:21

标签: javascript angularjs authentication firebase

我使用Firebase作为我的主要后端解决方案,并创建了一个服务,用于在整个应用程序中处理auth(因为我开始使用simpleLogin,现在我尝试使用他们内置的登录方法,我认为在从应用程序的其余部分访问之前创建所有范围可能会更好。

我的firebase引用工作正常,因此它是auth方法 但是onAuth()和offAuth()的监听方法都抛出了这个错误:

Uncaught TypeError: Cannot read property 'auth' of undefined - firebase-debug.js:9954

这是firebase本身的错误还是有人看到我做错了什么? 尝试使用角度版本并关闭其他凉亭包,如angularfire和firebase-simple-login,但到目前为止没有成功。

我的身份验证服务代码如下所示,除了在.constant服务上定义我的网址之外,我没有做任何事情。

    angular.module('myApp')
    .factory('auth', function (firebaseAPIUrl) {

      var ref = new Firebase(firebaseAPIUrl),
          onAuth = ref.onAuth,
          offAuth = ref.offAuth;

      onAuth(function (authData) {
        console.log(authData);
      });

      function getCurrentUser() {
        return ref.getAuth();
      }

      ...

      return {
        onAuth: onAuth,
        offAuth: offAuth,
        getCurrentUser: getCurrentUser,
        ...
      }
    }

1 个答案:

答案 0 :(得分:6)

在JavaScript中,当传递函数以供以后调用时,必须注意将调用该函数的范围。例如,在定义闭包时,闭包将具有自己的作用域,而this可能不再指向我们的原始对象。使用fn.bind(...)解决了这个问题。

这可能会变得棘手,因为您正在使用的代码可能取决于特定的范围。诀窍是确保范围没有随着你作为参数传递函数而改变,这可以通过显式方法绑定到原始对象之前来实现传递它。

查看http://www.reactive.io/tips/2009/04/28/binding-scope-in-javascript/http://alistapart.com/article/getoutbindingsituations,了解有关此主题的更深入了解情况。