2013-05-06 2 views
0

В настоящее время, я делаю что-то вроде этого:

var albumList = $resource('https://api.imgur.com/3/account/guy123/albums').get(function() { 
    albumList.data.forEach(function (album) { 
     albums.push(album); 
    }); 
}); 

Как превратить это в функцию, которую я могу назвать как в моей службе и управлении, как:

factory('Imgur', function($resource, $http) { 
    var albumsService = {}; 
    var albums = []; 

    albumsService.getAlbumList = function() { 
     var albumList = $resource('https://api.imgur.com/3/account/guy123/albums').get(function() { 
      albumList.data.forEach(function (album) { 
       albums.push(album); 
      }); 
     }); 
    }; 

    albumsService.albumList = function() { 
     albumsService.getAlbumList(); 
     return albums; 
    }; 

    return albumsService; 
}); 


.controller('Filters', ['$scope','Imgur', function($scope, Imgur) { 
    $scope.imgur = Imgur; 
    $scope.imgur.albumList(); 
    //OR 
    $scope.imgur.getAlbumList(); 

    //Some good context here is what if a user wanted to "refresh" the data. 
    $scope.updateFilter = function() { 
     $scope.imgur.getAlbumList(); 
    }; 


}]); 

В конечном итоге цель здесь - иметь возможность вызова службы ресурсов столько раз, сколько я хочу. Служба должна быть функцией, вызываемой как внутри службы, так и внутри контроллера.

+0

может помочь увидеть plunkr/скрипку всего кода/контроллер и т. д. –

+0

Я не уверен, что вы пытаетесь сделать здесь. Я думаю, что вы слишком много. Вы просто пытаетесь получить доступ к imgur api, но имеете результаты в другом формате? Неясно, в чем проблема. – jessegavin

+0

От 2-й до последней строки '$ scope.imgur.albumList();' не имеет смысла. Вы ничего не назначаете результат функции. – jessegavin

ответ

1
angular.module("MyApp", ['ng-resource']). 
    service("Database", function() { 
    return { 
     albums : $resource('https://api.imgur.com/3/account/guy123/albums') 
    } 
    }). 
    controller("MyCtrl", function(Database) { 
    $scope.albums = Database.albums.query(); 
    }) 

Затем в Html

<html ng-app="MyApp"> 
<head></head> 
<body ng-controller="MyCtrl"> 
    <ul> 
    <li ng-repeat="album in albums"> 
     {{album.name}} 
    </li> 
    </ul> 
</body> 
</html> 
+0

Мне нужно будет иметь возможность совершать служебные звонки внутри сама услуга, поэтому необходимо выполнить сервис как функцию. –

+0

Зачем вам это нужно? – jessegavin

+0

Я сделал некоторые изменения, чтобы надеяться, что это устранит путаницу. –

1

Service

var service = angular.module("yourApp.service", ['ngResource']); 
service.factory('albumsService', [$resource',function ($resource){ 
    return $resource('https://api.imgur.com/3/account/guy123/albums',{},{ 
     query: {method: "GET", isArray:true} 
    }); 
}]); 

Затем в контроллере

$scope.albumList = albumsService.query(); 
+0

Мне нужно будет иметь возможность совершать служебные вызовы внутри самой службы, поэтому необходимо выполнить сервис как функцию. –

+0

Не могли бы вы использовать параметры:? В зависимости от того, какой тип вызовов вы делаете. Я знаю, что в одном из моих вариантов использования у меня есть несколько типов запросов, которыми я управляю через параметры. – zmanc

+0

Я сделал некоторые исправления, чтобы надеяться, что это устранит путаницу. –

Смежные вопросы