Angular - 简单的自定义服务,不会将数据返回给控制器

时间:2017-01-28 20:44:00

标签: javascript angularjs arrays

在我的代码的这个特定部分上,我已经好几个星期了。我所拥有的是一个简单的自定义服务,它将通过ajax获取我的数据,然后我执行一个后期处理,最后我想将该数据返回给我的控制器。即使我的服务很难正确地创建我的对象也没有任何东西回到我的控制器。

我尝试使用“deferred.promise”方法,它确实将数据返回给控制器,但是在一个$$状态对象中,由于某些奇怪的原因我无法通过控制器访问。这是另一个问题。

我只需要一个简单的方法将数据返回给我的控制器,但所有的后期处理都必须在我的服务中处理。有谁知道这是否可能?

这是我得到的。

我的服务:

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

app.factory('MyService', function($http, $q, $timeout){

    var My_Stored_Data = {}

    return {

        load_my_data_service: function(){

            $http({
                method: 'GET',  
                url: 'AJAX PATH',
                headers: { "Accept": "application/json;odata=verbose;charset=utf-8"} 
            }).then(function(data){

                //post-process my data before returning it to the controller $scope.return_my_data_here
                My_Stored_Data = data;
                My_Stored_Data.data_result_1 = My_Stored_Data.data_result_1.split("\r\n");
                My_Stored_Data.data_result_2 = My_Stored_Data.data_result_2.split("\r\n");
                console.log(My_Stored_Data)//logs shows the that "My_Stored_Data" has processed my data correctly.
                return My_Stored_Data //Return my data tot he controller $scope.return_my_data_here.

            });     

        }

    }               
});

我的控制器:

app.controller('MyController', function ($scope,$q,MyService) {

    $scope.fetch_my_data = function(){

        $scope.return_my_data_here = MyService.load_my_data_service();

    }
    $scope.fetch_my_data() //Initiate on page load

});  

2 个答案:

答案 0 :(得分:2)

我相信你错过了$http({..

之前的退货声明
return {

    load_my_data_service: function(){

        return $http({
            method: 'GET',  
            url: 'AJAX PATH',
            headers: { "Accept": "application/json;odata=verbose;charset=utf-8"} 
        }).then(function(result){    
            return result.data;    //to make it cleaner, just return the promise itself to your controller..
        });    

    }

}  

这将解决您的服务问题。然后在您的控制器中,使用

$scope.return_my_data_here = {};

MyService.load_my_data_service().then(function(data){
    var My_Stored_Data = data;
    My_Stored_Data.data_result_1 = My_Stored_Data.data_result_1.split("\r\n");
    My_Stored_Data.data_result_2 = My_Stored_Data.data_result_2.split("\r\n");
    $scope.return_my_data_here = My_Stored_Data;
});

答案 1 :(得分:2)

@Ali Baig是对的。你需要回报,正如他所指出的那样。但是返回的对象是一个承诺,而不是您期望的原始数据,所以您还需要这个:

app.controller('MyController', function ($scope,$q,MyService) {

    $scope.fetch_my_data = function(){

        // MyService.load_my_data_service() will return a promise. 
        $scope.return_my_data_here = MyService.load_my_data_service();

        // Use .then() to do something with that promise.
        // NOTE: This code will run asynchronously.
        $scope.return_my_data_here.then(function(data){ 
            $scope.actualData = data;
            console.log($scope.actualData);
        });
    }
    $scope.fetch_my_data() //Initiate on page load
});