我目前正在尝试在我的角度模型中进行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=XXXX 和 https://api.themoviedb.org/3/search/movie?query=USERINPUT&api_key=XXXX
答案 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'}