2017-03-19 16 views
0

1年半前、このauthSrvを使用してバックエンドのAPIを使用してログインしてユーザーをログアウトし、完全に機能する角度アプリを作成しました。私はもう一度同じコードを実行しようと、私はこれは私のauthSrv(工場)のコードであるError: [$injector:undef] Provider 'authSrv' must return a value from $get factory method.

を得る:私は当時、今ではなくエラーが出るのはなぜ

app.factory('authSrv', function ($rootScope, $http, $auth, $state, config, $q) { 

    var deferred = $q.defer(); 

    this.login = function (email, password) { 
     // Show loading dialog 
     $rootScope.showLoading(); 

     var credentials = { 
      email: email, 
      password: password 
     }; 

     return $auth.login(credentials) 
      .then(
       function (result) { 
        $http.get(config.server + 'restricted/user') 
         .then(function (response) { 
          // Stringify the returned data to prepare it 
          // to go into local storage 
          var user = JSON.stringify(response.data.user); 

          // Set the stringified user data into local storage 
          localStorage.setItem('user', user); 

          // The user's authenticated state gets flipped to 
          // true so we can now show parts of the UI that rely 
          // on the user being logged in 
          $rootScope.auth = true; 

          // Putting the user's data on $rootScope allows 
          // us to access it anywhere across the app 
          $rootScope.currentUser = response.data.user; 

          // Remove loading dialog 
          $rootScope.hideLoading(); 

          // Everything worked out so we can now redirect to 
          // the users state to view the data 
          $state.go('app.artists'); 

          deferred.resolve(response.data.user); 
          // promise is returned 
          return deferred.promise; 
         }); 
       }, 
       function (error) { 
        // the following line rejects the promise 
        deferred.reject(error); 

        // Remove loading dialog 
        $rootScope.hideLoading(); 

        // promise is returned 
        return deferred.promise; 
       }); 
    }; 

    this.logout = function() { 
     // Show loading dialog 
     $rootScope.showLoading(); 

     $auth.logout().then(function() { 
      // Remove the authenticated user from local storage 
      localStorage.removeItem('user'); 

      // Flip authenticated to false so that we no longer 
      // show UI elements dependant on the user being logged in 
      $rootScope.auth = false; 

      // Remove the current user info from rootscope 
      $rootScope.currentUser = null; 

      $state.go('app.auth').then(function() { 
       // Remove loading dialog 
       $rootScope.hideLoading(); 
      }); 
     }); 
    }; 
}); 

?何か変わった?

答えて

1

ではなく、app.service()のユーザーを指定する必要があります。ファクトリは、サービスインスタンスを作成して返す関数です。あなたの関数は、thisを初期化するコンストラクタ関数です。それはservice()のためです。

+0

はい、そうでした。私は古いコードを再チェックし、当時はサービスだった。私は 'app.service'を除いてすべてをコピーし、それが工場だと仮定しました。私はとても恥ずかしい気がする。この質問を削除できますか? :D – Jhivan

関連する問題