2014-09-30 2 views
0

HTTP 호출을 수행하고 특정 URL로 데이터를 가져 오는 서비스가 있습니다. 내가 뭘 하려는지 컨트롤러에서 서비스로 인수를 전달하고 내 URI에 매개 변수로 사용하는 것입니다.각도에서 컨트롤러에서 서비스로 인수 전달

예를 들어, 내 전화는 이제 api.myurl.com/foo이며 나는 그것이

가 검색 양식에서 사용자의 입력

을 api.myurl.com/foo/bar 만들고 싶어.

서비스

angular.module('MyApp').service('MyMapper', function(MyService, $http, $q, API_TR_URL, _, PAGINATION_LIMITS) { 
function MyMapper() {} 

    MyMapper.prototype.find = function(params) { 
    var p = angular.copy(params); 
    p.limit = PAGINATION_LIMITS.myResolver; 
    var d = $q.defer(); 

    var requestURL = API_TR_URL + '/app_dev.php/entities/' + param; 

     $http.get(requestURL) 
     .success(function(results) 
     { 
      console.log('Results data entities: ', results.data.data.entities); 
      for (var entitiesIndex in results.data.data.entities) 
      { 
       var preparedData = results.data.data.entities[entitiesIndex]; 
       results.data.data.entities[entityIndex] = new Entity(preparedData); 
      } 

      d.resolve(results); 
     }) 
     .error(function(status) 
     { 
      d.reject(arguments); 
     }); 

    return d.promise; 
    }; 

return new MyMapper(); 
}); 

이 같은 컨트롤러 : 순간

, 내 코드는 다음과 같습니다

angular.module('MyBackendApp') 
.controller('MySearchFormController', ['$scope', 'API_TR_URL', 'MyMapper', '$location', function($scope, MyMapper, $location){ 
    $scope.submit = function(){ 

      console.log('-- Search string: '+ $scope.entityName); 

      var entitiesCount = Object.keys(data.data.data.entities).length; 
      $scope.totalPagesNum = Math.ceil(entitiesCount/10); 
      $scope.page = data.page; 

      var d = $q.defer(); 

      // Build the results 
      $scope.entitiesResults = (function listEntities(entities, $scope){ 

       var entities = data.data.data.entities; 

       if ((typeof entities === 'undefined') || (entities.length === 0)){ 
        return null; 
       } 

       return entities; 
      })(); 


    } 
} 

]); 

답변

0

아니 어디 컨트롤러에서에 대한 참조를 사용합니까?변수이지만 MyMapperMyMapper의 인스턴스이므로 find함수이 있습니다. 그래서 컨트롤러에 다음과 같은 코드 find함수 MyMapper객체를 호출하고 기능에 의해 반환 된 약속를 저장

var promise = MyMapper.find({param1:1,param2:"a"}); 

을 가질 수 있습니다. 그런 다음 이렇게

promise.then(function(entities) { 
    //TODO ON SUCCESS 
}, function(errorMsg) { 
    //TODO ON FAIL 
}); 

은 또한 당신이 대신 servicefactory 기능을 사용한다고 생각처럼 약속의 결과를 수신 할 수 있습니다.

모든 것이 자바 스크립트 용으로 컴파일되고 각도 용으로 등록 된 경우에만 제공됩니다.

+0

나는 당신이 제안한 변경을했다. 그래서 엔티티 이름을 다음과 같이 전달합니다. MyMapper.find ({param : $ scope.a}); 어떻게하면 공장에서 액세스하여 다음 URL에 포함시킬 수 있습니까? var requestURL = API_TR_URL + '/app_dev.php/entities/'+ param; ? 사용할 수 없습니다. – thitami

+0

'find'에서 또 다른 인자 ('param')를 사용하거나'params.param' 또는'p.param'을 참조 할 수 있습니다 ('p'는'params'의 복사본입니다). –

+0

현재 MyMapper 팩토리는 호출되지 않습니다. 디버깅해야합니다. – thitami

관련 문제