2014-03-03 2 views
1

내가 현재 다음과 같은 간단한 공장이 컨트롤러에 사용 가능한 객체 소독 한 제작 :각도 JS는 - 서비스/공장에서 데이터를 조작하고

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 호출에서 반환 : 나는 다음에 내 공장을 바 꾸었습니다.

내 컨트롤러의 변수에서 '필터'변수를 콘솔에 연결하려고하면 '정의되지 않은'메시지가 나타납니다. 위의 공장 구문에서 잘못된 점은 무엇입니까?

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; 
} 
} 
}); 

및 컨트롤러에서 다음과 같이 호출 : 공개적 filters를 반환하는 것을 노출하지 않는 때문에

답변

2

시도

$scope.filters = myFactory.getFilters();

변명 끔찍한 서식, here's a plunk을.

+0

감사합니다. 측면 질문으로, 나는 connection.query()에서 가져온 'filters'객체가 내 컨트롤러에있는 것과 마찬가지로 리소스 객체라는 것을 알게되었습니다. 하지만 내 컨트롤러와 달리, 나는 그것을 해결하기 위해 '필터. 약속.'을 사용할 수 없다. 공장/서비스에 대한 약속은 어떻게 처리합니까? –

+0

나는 자원이 그다지 필요 없다고 생각한다. 실수가 아니라면 약속을 되 돌리는 $ http이다. 가능한 한 컨트롤러에서 자원을 사용하여 어떻게 쓰레기를 게시 했습니까? –