2

다음 코드로 API에서 데이터를 가져올 수있는 팩토리 서비스를 만들었습니다.

app.factory('Book', ['$resource','$http', function($resource, $http) { 
    return $resource('http://someurl.com/api/book/', {}, { 
     query: {method:'GET', isArray:false} 
    }); 
    }]); 

위의 코드는 데이터를 가져 오는하지만 난 다른 모든 API 호출에 액세스 할 수있는 다음 구문 분석 할 수있는 단일 서비스를하고 싶습니다 작동합니다. 다음은 $ http 서비스로 구축하는 이론적 방법이지만이 방법을 사용할 수는 없습니다. 그리고 나는 또한 $ resource의 기능을 갖고 싶습니다. 내가 바라는 것은 누군가가 나에게 각각의 구문을 어떻게 전달할 것인가에 대한 것이었다. $ resource "서비스"에 연결된 기능을 "호출"하는가? 아래의 $ http 서비스와 마찬가지로

app.service('dataService', ['$resource','$http', function($resource, $http) {  
    var urlBase = 'http://someurl.com/api/'; 

    this.getBooks = function() { 
     return $http.get(urlBase + 'book') 
    }; 

    this.getArticles = function() { 
     return $http.get(urlBase + 'articles'); 
    }; 
}]); 
+1

'$ http.get (urlBase + 'book')'대신'$ resource (urlBase + 'book')을 넣을 수는 없습니까? – Gustav

답변

4

필요에 맞게 수정되었습니다. 그것을 실행하려고 시도하지 않았습니다.

app.factory('DataService', ['$resource', 
    function($resource) { 
     return $resource('http://someurl.com/api/:path', { 
      path: '@path' 
     }, { 
      getBook: { 
       method: 'GET', 
       params: { 
        path: 'book' 
       } 
      } 
     }, { 
      getArticles: { 
       method: 'GET', 
       params: { 
        path: 'articles' 
       }, 
       isArray: true 
      } 
     }); 
    } 
]) 

그런 다음 컨트롤러에 딱 맞는 경로로 자원 서비스를 호출 :

this.getBook = function() { 
    $scope.book = DataService.getBook({}, function success() { 
     //your code 
    }, function err() { 
     //your code 
    }); 
}; 

this.getArticles = function() { 
    $scope.articles = DataService.getArticles({}, function success() { 
     //your code 
    }, function err() { 
     //your code 
    }); 
}; 
+0

거의 제가 논리를 가지고 싶습니다. 다른 방법으로 - 내 경로가 서비스에 정의되어 있으므로 컨트롤러에서'DataService.getBooks();'또는'DataService.getArticles(); '를 호출 할 수 있습니다. –

+0

나는 그것을 편집했으나 아직 실행하지 않았다. – Goodzilla

+0

같은 리소스 URL에 다른 수의 매개 변수를 전달할 수있는 방법은 무엇입니까? – neelmeg

2

Goodzilla가 일 이상이 솔루션 -하지만 난 Gustav

app.service('dataService', ['$resource', function($resource) { 
    var urlBase = 'http://someurl.com/api/'; 

    this.getBooks = function() { 
     return $resource(urlBase + 'Books').get(); 
    }; 

    this.getArticles = function() { 
     return $resource(urlBase + 'Articles').get(); 
    }; 

}]); 
하여 솔루션을 사용하여 종료

그리고 컨트롤러

app.controller('MyCtrl', ['$scope', 'dataService', function($scope, DataService) { 
    $scope.logBook = DataService.getBooks(); 
}]);