【问题标题】:Cannot read property 'get' of undefined when using $http [duplicate]使用 $http 时无法读取未定义的属性“获取”[重复]
【发布时间】: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)

标签: angularjs


【解决方案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 并在方法签名中排除第三个参数来解决此问题。

这两个更改应该可以解决这个问题。我没有包含其余代码。

【讨论】:

    猜你喜欢
    • 2019-05-25
    • 1970-01-01
    • 2020-12-05
    • 2019-05-16
    • 2020-02-14
    • 1970-01-01
    • 2017-06-05
    • 2019-03-10
    相关资源
    最近更新 更多