使用 $http 时无法读取未定义的属性“获取”[重复]
Posted
技术标签:
【中文标题】使用 $http 时无法读取未定义的属性“获取”[重复]【英文标题】:Cannot read property 'get' of undefined when using $http [duplicate] 【发布时间】:2018-09-11 13:54:57 【问题描述】:我不断收到以下错误:
Cannot read property 'get' of undefined
at Object.getChannelIdFromYoutubeUsername
at Object.vm.creatorAccountCreationFormSubmit
即使我将 $http 注入到我的服务中,并且每当我将传递给 $http.get 命令的 url 粘贴到我的浏览器窗口中时,我都会得到一个输出。
这是我的服务:
angular.module('adsomaApp').service('YoutubeService', function($log)
var url = 'https://www.googleapis.com/youtube/v3';
function getChannelIdFromYoutubeUsername(youtubeApi, youtubeUsername, $http)
var queryUrl = url + "/channels/?key=" + youtubeApi + "&forUsername=" + youtubeUsername + "&part=id";
return ($http.get(queryUrl).then(handleSuccess, handleError));
function handleSuccess(response)
return response.data;
function handleError(response)
if (!angular.isObject(response.data) || !response.data.message)
return ($q.reject('An unknown error occurred.'));
return ($q.reject(response.data.message));
var youtubeService =
getChannelIdFromYoutubeUsername: getChannelIdFromYoutubeUsername
;
return youtubeService;
);
这是我的控制器:
vm.channelId = ;
vm.creatorAccountCreationFormSubmit = function()
YoutubeService.getChannelIdFromYoutubeUsername(ConstantsService.youtubeSettings().youtubeApiKey, vm.connectYoutubeFormData.youtubeUsername).then(function(succ)
vm.channelId = succ;
$log.info(vm.channelId);
, function error(err)
$log.error('Error: ', err);
);
;
【问题讨论】:
在您的服务中注入$http
function($log, $http)
【参考方案1】:
angular.module('adsomaApp').service('YoutubeService', function($log, $http)
你没有注入服务层,所以它显示未定义
【讨论】:
谢谢 - 愚蠢的错误。 有时错误有助于刷新知识。 :)【参考方案2】:两个基本变化:
将 $http 注入到服务中
angular.module('adsomaApp').service('YoutubeService', function($http, $log)
从该服务方法的参数中移除 $http
function getChannelIdFromYoutubeUsername(youtubeApi, youtubeUsername)
问题在于,当从控制器调用此服务方法时,您不会发送第三个参数。这基本上意味着 $http 将为空。 我已通过在服务中注入 $http 并在方法签名中排除第三个参数来解决此问题。
这两个更改应该可以解决这个问题。我没有包含其余代码。
【讨论】:
以上是关于使用 $http 时无法读取未定义的属性“获取”[重复]的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:从 API 获取时无法读取未定义的属性(读取“地图”)