修复AngularJS错误:Provider必须从$ get factory方法返回值

时间:2015-04-02 06:04:16

标签: javascript angularjs

当我使用下面的代码时,我收到以下错误:

  

提供商'登录'必须从$ get factory方法返回一个值。

我已经审核了stackoverflow帖子herehere,但无法弄清楚我做错了什么。

myApp.factory('Login', function($location, $firebaseAuth, Ref, Auth) {
    var authData = Ref.getAuth();

   if (authData) {console.log('already logged in with ' + authData.uid)} else {

      return Auth.$authAnonymously({rememberMe: true}).then(redirect, showError);

      function redirect() {
      $location.path('/account');
    }

      function showError(err) {
      Login.err = err;
    }
  }
});

2 个答案:

答案 0 :(得分:2)

factory而言,您必须返回一个对象。由于您没有返回任何内容,这意味着其他服务/控制器无法使用此服务。

如果您只是检查身份验证,它必须在您的Auth服务中,该服务必须是IIFE功能。这将检查并重定向用户。

例如:

在Auth / Ref服务中,创建IIFE

(function() {
var authData = Ref.getAuth();

   if (authData) {console.log('already logged in with ' + authData.uid)} else {

      return Auth.$authAnonymously({rememberMe: true}).then(redirect, showError);

      function redirect() {
      $location.path('/account');
    }

      function showError(err) {
      Login.err = err;
    }
  }
})();

否则在init()方法中插入代码并在您的服务中调用该代码。所以这只会运行一次。

如果要为应用程序的其他部分公开单例界面,则必须使用服务。

答案 1 :(得分:0)

您必须从工厂返回一个对象或函数或至少一个值