Currently I'd like to get data from an API, sending some search parameters using an AngularJS service. In my ng-model I have a variable called search, and I would like to use that variable as a parameter to the API URL.
My first (unsuccessful) approach was to use the $scope.search variable directly inside the service:
$http.get('http://www.omdbapi.com/?s='+ $scope.search +'&type=series&r=json').then(function(data){
deferred.resolve(data);
});
I've read that passing the $scope to the service is not possible (and shouldn't be done anyway), so how can I use the scope variable as a parameter in the service, also, is there a cleaner way to set the paramaters other than adding the string myUrl + search?
full code:
myApp.service('showsService', function($http, $q){
var deferred = $q.defer(); //promise to say 'im going to do this later'
$http.get('http://www.omdbapi.com/?s=sherlock&type=series&r=json').then(function(data){
deferred.resolve(data);
});
this.getShows = function(){
return deferred.promise;
}
});
myApp.controller("showsController", function($scope, showsService){
$scope.$watch('search', function() {
fetch();
});
function fetch(){
var promise = showsService.getShows();
promise.then(function(data){
$scope.showsResult = data.data.Search; //using the name than comes back from the API
});
}
});
http.getfunction which i'm using, neither do they use a service -as far as I can see- since they implement a factory?$http.getwhen the service is initialized (app startup), and since services are singletons, it's only ever going to make the call once. also,$httpreturns a promise, so you shouldn't wrap that promise inside another promise (don't use$qhere). pass your parameter to yourgetShows(searchTerm), call your$http.getinside that function, and return that, to chain.then()from.