如何从角度js中的服务返回值?

时间:2014-12-04 14:57:09

标签: javascript angularjs

我知道数据来自服务器(我有单元测试并且已经在chrome中看到了调试器中的数据)但是我无法弄清楚如何将数据从角度服务返回到角度控制器。

服务:

已更新

surchargeIndex.service('customerService', [
'$http', function ($http) {
    this.getTest = function () {
       return $http({
                method: "GET",
                url: "api/Customer/GetTest",
            })
            .success(function(data) {
                return data;
            });
    };
}

]);

控制器:

surchargeIndex.controller('SurchargeIndexController', function ($scope, customerService, templateService) {
    $scope.customers = customerService.getTest();

});

Data拥有服务器中的数组,因此数组将填充在服务中。所以要重申数据是存在的;但是,我在调试期间收到成功处理程序的404错误INSIDE。

我错过了什么?

2 个答案:

答案 0 :(得分:3)

$http异步工作;幸运的是,它返回一个承诺,当从服务器检索到响应时,它将被实现。所以你应该返回$ http的get方法并使用返回的promise来处理数据。

this.getTest = function () {
        return $http({
                method: "GET",
                url: "api/Customer/GetTest",
            })
            .success(function(data) {
                return data;
            })
            .error(function() {
                alert("failed");
        }); // This returns a promise

    };

然后在您的控制器中,您应该使用该承诺来检索预期的数据。

surchargeIndex.controller('SurchargeIndexController', function ($scope, customerService, templateService) {
    //Use the returned promise to handle data, first parameter of the promise is used for successful result, if error happens, second parameter of the promise returns the error and you can do your error handling in that function
    customerService.getTest().then(function(customers){$scope.customers = customers;},   function(err){console.error(err);})
});

答案 1 :(得分:0)

您需要定义一个回调来获取您的数据"返回"在异步http调用之后到你的控制器...有不同的方法...我会告诉你没有回调或承诺的一种方式,但最好的方法是使用回调,或承诺..

Wild West Way:

app.controller('myCTRL', function($scope, myService) {

       $scope.valueWanted = myService.valueWanted;
       myService.getData();

});

app.service('myService', function($http) {

       var myThis = this;

       this.valueWanted = "";
       this.getData = function () {
              $http.get('api/Customer/GetTest').success(function (data) {
                     myThis.valueWanted = data.valueWanted;
              });
       };

});