我对棱角分明有点新意,对这个问题感到头疼。我的工厂console.log
显示第一次通过所有内容都已正确定义,但工厂出于某种原因重新评估我将其传递给undefined
的数据。这是我的代码,从html输入开始,将数据传递给控制器,然后传递给工厂:
HTML:
<input type="text" placeholder="Enter Channel" ng-model="channel" ng-keydown="$event.which === 13 && cname(channel)"/>
一旦按下回车键,这将向我的控制器发送在输入字段中输入的内容cnam(channel)
控制器和工厂:
angular.module('youtubePlaylistAppApp')
.factory('ytVids', function($http){
return{
getChannel: function(name){
console.log('name: '+name);
var url = 'https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername='+ name +'&key=[my api key]';
console.log(url);
return $http.get(url);
},
getVids: function(channel){
console.log('channel: '+ channel);
return $http.get('https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults=50&playlistId='+channel+'&key=[my api key]')
.success(function(response){
//console.log(response.items);
return response.items;
});
}
};
})
.controller('indexCtrl', function ($scope, ytVids) {
$scope.cname = function(channel){
console.log(channel);
ytVids.getChannel(channel);
ytVids.getChannel().success(function(response){
console.log(response);
console.log(response.items[0].contentDetails.relatedPlaylists.uploads);
ytVids.getVids(response.items[0].contentDetails.relatedPlaylists.uploads)
.success(function(data){
console.log(data.items);
$scope.ytChannel = data.items;
});
});
};
});
输入在输入字段中输入后,我在控制台开发工具中看到的输出是:
第一个控制台日志console.log(channel);
控制台记录正确的响应。如果我输入“freddiew”并按回车键,那就是记录的内容
然后我将其传递到我的工厂ytVids.getChannel(channel);
和工厂中的控制台登录console.log('name: '+name);
这会记录正确的响应,如name: freddiew
然后我声明一个变量var url =
并将其提供给youtube网址,并使用网址连接通道名称
然后我控制台记录变量并得到预期的https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=freddiew&key=[my api key]'
当我在邮递员中尝试并且只是硬编码名称时,这个网址有效。但是传递名称,然后控制台会发出更多日志,我不知道为什么,它看起来像是覆盖了网址我刚建好来打电话,因为这是从工厂记录的内容:
name: freddiew
https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=freddiew&key=[my key]
然后将其记录为undefined
,并使用网址将api调用concats undefined
并使用此undefined
网址进行api调用
name: undefined
https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=undefined&key=[my key]
forUsername=
是频道名称应该去的地方。
任何人都知道为什么它被定义为undefined
?
答案 0 :(得分:2)
我认为你有错误的额外服务电话。
.controller('indexCtrl', function ($scope, ytVids) {
$scope.cname = function(channel){
console.log(channel);
//ytVids.getChannel(channel); <-- you should remove this & passed channel param in below call
ytVids.getChannel(channel).success(function(response){
console.log(response);
console.log(response.items[0].contentDetails.relatedPlaylists.uploads);
ytVids.getVids(response.items[0].contentDetails.relatedPlaylists.uploads)
.success(function(data){
console.log(data.items);
$scope.ytChannel = data.items;
});
});
};
});