AngularJS $resource - 将数组元素添加到 paramDefaults
AngularJS $resource - adding array element to paramDefaults
我正在使用 twitch.tv api 并使用 Angular $resource 工厂。我尝试使用的端点是:GET /channels/:channel。我想要做的是获取每个数组元素的通道。我试过 /channels/users[1] 但我知道这是错误的。如何获得数组中所有用户的 :channel?或者有更好的方法吗?
(function() {
angular.module('twitch', ['ngResource'])
.controller('TwitchController', ['$scope', 'TwitchAPI', function($scope, TwitchAPI) {
$scope.getAPI = function(){
var users = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"];
for(var i = 0; i < 8; i++){
TwitchAPI.get({channel: users.i});
}
}
$scope.online = [];
$scope.offline = [];
}])
.factory('TwitchAPI', function TwitchAPIFactory($resource){
return $resource('https://api.twitch.tv/kraken/channels/:channel', { callback: "JSON_CALLBACK" });
});
})();
首先,你不需要使用 JSONP,因为 Twitch API 支持 CORS 请求,你可以像这样配置你的 $resource
return $resource('https://api.twitch.tv/kraken/channels/:channel', {}, {
get: {
method: 'GET',
headers: {
Accept: 'application/vnd.twitchtv.v3+json',
'Client-ID': 'Your client ID'
}
}
})
如果你真的想使用 JSONP,你不能在请求中发送 header 信息,所以它必须看起来像
return $resource('https://api.twitch.tv/kraken/channels/:channel', {
callback: 'JSON_CALLBACK',
api_version: 3,
client_id: 'your client ID'
}, {
get: {
method: 'JSONP'
}
})
似乎没有一种方法可以一次获得多个频道(参考:https://github.com/justintv/Twitch-API/blob/master/v3_resources/channels.md),但您应该能够并行执行此操作
您可以像这样创建一个简单的承诺数组
var promises = users.map(user => TwitchAPI.get({channel: user}).$promise);
然后您可以使用 $q.all
等待所有承诺解决
$q.all(promises).then(channels => {
angular.forEach(channels, channel => {
// access each channel's properties here
console.log('Channel name:', channel.display_name);
});
});
只是不要忘记注入 $q
服务。
我正在使用 twitch.tv api 并使用 Angular $resource 工厂。我尝试使用的端点是:GET /channels/:channel。我想要做的是获取每个数组元素的通道。我试过 /channels/users[1] 但我知道这是错误的。如何获得数组中所有用户的 :channel?或者有更好的方法吗?
(function() {
angular.module('twitch', ['ngResource'])
.controller('TwitchController', ['$scope', 'TwitchAPI', function($scope, TwitchAPI) {
$scope.getAPI = function(){
var users = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"];
for(var i = 0; i < 8; i++){
TwitchAPI.get({channel: users.i});
}
}
$scope.online = [];
$scope.offline = [];
}])
.factory('TwitchAPI', function TwitchAPIFactory($resource){
return $resource('https://api.twitch.tv/kraken/channels/:channel', { callback: "JSON_CALLBACK" });
});
})();
首先,你不需要使用 JSONP,因为 Twitch API 支持 CORS 请求,你可以像这样配置你的 $resource
return $resource('https://api.twitch.tv/kraken/channels/:channel', {}, {
get: {
method: 'GET',
headers: {
Accept: 'application/vnd.twitchtv.v3+json',
'Client-ID': 'Your client ID'
}
}
})
如果你真的想使用 JSONP,你不能在请求中发送 header 信息,所以它必须看起来像
return $resource('https://api.twitch.tv/kraken/channels/:channel', {
callback: 'JSON_CALLBACK',
api_version: 3,
client_id: 'your client ID'
}, {
get: {
method: 'JSONP'
}
})
似乎没有一种方法可以一次获得多个频道(参考:https://github.com/justintv/Twitch-API/blob/master/v3_resources/channels.md),但您应该能够并行执行此操作
您可以像这样创建一个简单的承诺数组
var promises = users.map(user => TwitchAPI.get({channel: user}).$promise);
然后您可以使用 $q.all
$q.all(promises).then(channels => {
angular.forEach(channels, channel => {
// access each channel's properties here
console.log('Channel name:', channel.display_name);
});
});
只是不要忘记注入 $q
服务。