Angular JS - 操作服务/工厂中的数据并使控制器可以使用清理对象

时间:2014-03-03 17:48:34

标签: angularjs

我目前有一个简单的工厂,如下所示:

myFactory.factory('myFactory', function($resource){
    return $resource('http://to/my/api', {}, {
        query: {
            method: 'GET'
        }
    });
});

我想将我目前在控制器中进行的一些数据处理/卫生工作转移到我的工厂。我将工厂改为:

myFactory.factory('myFactory', function($resource){
    var connection = $resource('http://to/my/api', {}, {
        query: {
            method: 'GET'
        }
    });
    var filters = connection.query();
    for(var i = 0; i < filters.data.length; i++){
        // Get the name value in the data array
        var name = filters.data[i].Name;
        // Create new properties in $scope.filters and assign arrays to them.  Each array is a separate filter
        filters[name] = filters.data[i].Values;
    }
    return filters;
});

基本上我在上面做的是重新排序从AJAX调用返回的对象数组的结构。

当我尝试在我的控制器中从工厂控制记录我的'过滤器'变量时,我得到一个'未定义'消息。我上面的工厂语法出了什么问题?

1 个答案:

答案 0 :(得分:2)

因为您没有公开曝光任何内容以返回filters,请尝试:

myFactory.factory('myFactory', function($resource){
  return {
     getFilters:function(){
                    var connection = $resource('http://to/my/api', {}, {
                        query: {
                              method: 'GET'
                       }
                    });
          var filters = connection.query();
          for(var i = 0; i < filters.data.length; i++){
          // Get the name value in the data array
          var name = filters.data[i].Name;
          // Create new properties in $scope.filters and assign arrays to them.  Each array is a separate filter
          filters[name] = filters.data[i].Values;
    }
    return filters;
}
}
});

并在你的控制器中调用它:

$scope.filters = myFactory.getFilters();

请原谅可怕的格式here's a plunk