使用 $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 获取时无法读取未定义的属性(读取“地图”)

Jquery tokenInput - 无法读取未定义问题的属性

TypeError:无法读取未定义的属性“棱镜”

使用 SectionList 时无法读取未定义的属性“长度”