使用Angular资源创建API调用

时间:2015-05-11 09:01:22

标签: angularjs

我目前正在尝试在我的角度模型中进行API调用,但不太确定如何格式化它。

由于web-url的格式因我想要的而有所不同,我需要进行不同的调用。

this.searchOne= $resource('https://api.themoviedb.org/3/search/movie', ?query= *USER INPUT HERE*, &api_key=XXXXXXXXX")
this.searchTwo = $resource(https://api.themoviedb.org/3/movie/*USER INPUT HERE*/videos, &api_key=XXXX)

但显然这不起作用。因为我不知道如何在/ string之前用用户输入编写代码等等。

控制器端代码看起来像这样,但我无法在正确的位置获得用户输入。

$scope.searchFunction= function(){
var input= $("#someVariable").val();
Dinner.DishSearch.get({userinput},function(data){
 $scope.movies=data.Results;
 $scope.status = "Showing " + data.Results.length + " results";
   },function(data){
     $scope.status = "There was an error";
   });
};

感谢任何帮助我如何格式化资源以使结束字符串看起来像这样: https://api.themoviedb.org/3/movie/USERINPUT/videos6api_key=XXXXhttps://api.themoviedb.org/3/search/movie?query=USERINPUT&api_key=XXXX

2 个答案:

答案 0 :(得分:0)

根据the $resource service docs,您可以使用不同的网址作为第三个参数提供多个操作

var baseUrl = 'https://api.themoviedb.org/3/';
var movieDB = $resource(baseUrl, {api_key: 'XXXX'}, {
   getVideos: {url: baseUrl + 'movie/:query/videos', isArray: true}
   search: {url: baseUrl + 'search/movie', isArray: true}
});

我认为这个api urls会返回一系列结果,所以不要忘记通过isArray: true来使它工作。

然后您可以根据需要使用此资源

movieDB.getVideos({query: userinput}, function(data) {});
movieDB.search({query: userinput}, function(data) {});

答案 1 :(得分:0)

首先,你可以创建一个变量,它保存每个api调用的公共部分,即baseUrl =“api.themoviedb.org/3/” 。这个字符串可以连接到每次剩余的部分,这将根据不同的调用而改变。 例如:baseUrl+"/search/movie"

此外,为了进行以下类型的api调用,其中数据在url的搜索部分中进行,如您的情况: “api.themoviedb.org/3/search/movie?query=USERINPUT&api_key=XXXX”

您可以在angular(https://docs.angularjs.org/api/ng/service/ $ location)中使用 $ location.search 方法

根据角度文档:

search(search, [paramValue]);

此方法是getter / setter。当没有任何参数调用时,它返回当前url的搜索部分(作为对象)。当使用参数调用时返回搜索部分并返回$ location。

// given url http://example.com/#/some/path?foo=bar&baz=xoxo
var searchObject = $location.search();
// => {foo: 'bar', baz: 'xoxo'}
// set foo to 'yipee'
$location.search('foo', 'yipee');
 // $location.search() => {foo: 'yipee', baz: 'xoxo'}