2015-10-24 31 views
0

我已經開始學習一些關於AngularJS的知識。我設法創建了一些簡單的控制器,但我想做一些重構並創建一個工廠。Angular JS,工廠返回數據,但在控制器中它不見了

這裏是我的js文件之一:

angular 
.module('myApp', ['ngResource']) 
.factory('UserFactory', ['$http', function ($http) { 
    return { 
     getOne: function() { 
      $http({method: 'GET', url: 'http://localhost:8080/login/login'}) 
       .success(function (data, status, headers, config) { 
        console.info(data); 
        return data; 
       }) 
       .error(function (data, status, headers, config) { 
        alert("failure"); 
       }); 
     } 
    } 
}]) 
.controller('UserController', ['$scope', 'UserFactory', function ($scope, UserFactory) { 
    $scope.user = UserFactory.getOne(); 
}]); 

程序正確的數據打印到該行從servlet收到的控制檯:console.info(data);
但控制任何不返回到視圖。我也放在這裏console.info(UserFactory.getOne())和它打印undefined

我的編碼錯誤在哪裏?

+5

如果仔細查看代碼,您會發現您沒有從getOne函數返回任何內容。 – PSL

+3

[如何從異步調用返回響應?]可能重複(http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call) – MinusFour

回答

2

getOne需要返回一個值,在這種情況下,它會從$ HTTP的承諾。成功方法應該返回控制器所需的值。

.factory('UserFactory', ['$http', function ($http) { 
return { 
    getOne: function() { 
     return $http({method: 'GET', url: 'http://localhost:8080/login/login'}) 
      .success(function (data, status, headers, config) { 
       return data; 
      }); 
    } 
} 
}]); 

現在在您的控制器中,您可以處理該結果。

app.controller('UserController', ['$scope', 'UserFactory', function ($scope, UserFactory) { 
UserFactory.getOne().then(function(data){ 
     $scope.user = data; 
}); 
}]); 

successfailure方法計提折舊。您應該嘗試使用then

.factory('UserFactory', ['$http', function ($http) { 
return { 
    getOne: function() { 
     return $http({method: 'GET', url: 'http://localhost:8080/login/login'}) 
      .then(function (response) { 
       return response.data; 
      }); 
    } 
} 
}]); 
-1

你的工廠在錯誤的地方返回,所以它返回undefined。您可以通過處理控制器本身的成功來修復它。嘗試這個。

var app = angular.module('plunker', []); 

app.factory('UserFactory', ['$http', function ($http) { 
    return { 
     getOne: function (callback) { 
      $http({method: 'GET', url: 'request_url'}) 
      .success(function (data, status, headers, config) { 
       callback(data, status, headers, config); 
      }) 
      .error(function (data, status, headers, config) { 
       alert("failure"); 
      }); 
    } 
} 
}]); 

app.controller('UserController', ['$scope', 'UserFactory', function ($scope, UserFactory) { 
    UserFactory.getOne(function(data){ 
      $scope.user = data; 
    }); 
}]); 

工作URL:DEMO

相關問題