修复AngularJS错误:提供程序必须从$get工厂方法返回值



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

提供程序"Login"必须返回$get工厂方法中的值。

我在这里和这里查看了stackoverflow的帖子,但不知道我做错了什么。

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;
    }
  }
});

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

如果您只是在检查身份验证,它必须在您的身份验证服务中,该服务必须是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()方法中,并在服务中调用该方法。所以这将只运行一次。

当您想为应用程序的其他部分公开单例接口以供使用时,必须使用服务。

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

最新更新