2016-02-05 104 views
1

我正在使用AngularJS應用程序。我有loginService.js文件定義如下登錄服務:javascript服務未返回承諾

(function() { 

    var loginService = function ($http) { 
     var login = function (userName, loginPassword) { 

      var data = "grant_type=password&username=" + userName + "&password=" + loginPassword; 

      $http.post("/Token", data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }) 
       .then(function (response) { 
        return response.data; 
       }); 


     }; 

     return { 
      login: login 
     }; 
    }; 

    var module = angular.module("MyApp"); 
    module.factory("loginService", loginService); 
}()); 

,並在LoginController中的JavaScript的定義如下:

(function() { 
    var app = angular.module("kanbanBoard"); 

    var LoginController = function ($scope, $location, loginService, localStorageService) { 

     var loginData = { 
      userName: "", 
      loginPassword: "" 
     }; 

     $scope.loginData = loginData; 

     var onLoginComplete = function (data) { 
      alert(data); 
      localStorageService.set('authorizationData', { token: response.access_token, userName: userName }); 

      //$location.url("/"); 
     }; 

     var onError = function (result) { 
      alert(result); 
      $scope.error = result; 
     } 

     $scope.login = function() { 

      loginService.login($scope.loginData.userName, $scope.loginData.loginPassword) 
          .then(onLoginComplete, onerror); 
     } 

    }; 

    app.controller("LoginController", LoginController); 
}()); 

我得到無法未定義來獲得屬性「然後」或在LoginController.js文件中爲空引用。據我所知,loginService類應該返回在LoginController中處理的promise。我不確定我在這裏做了什麼錯誤。

+1

依賴注入是如何在這裏工作的?你正在註冊'module.factory(「loginService」,accountManager);'(奇怪的命名?)並將它注入到'LoginController'中。 '角'能夠找到它而不會拋出錯誤? – yangmillstheory

回答

1

您需要在登錄函數返回從$ http.post返回承諾:

 return $http.post("/Token", data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }) 
      .then(function (response) { 
       return response.data; 
      }); 

否則無效返回等(空)。然後()會導致你提到的錯誤。

+0

外部函數登錄不會自動返回內部匿名函數的返回...您可以鏈接承諾... –

+0

我這樣做的愚蠢的錯誤。它正在工作。謝謝 – Nps

1

您在accountManager.login(...)的調用中沒有返回$http.post的值,因此它將返回undefined,這肯定不是當時的能力。