无法阅读财产' get'使用$ http时未定义

时间:2018-04-02 10:42:21

标签: angularjs

我一直收到以下错误:

editor.commit();

即使我在我的服务中注入了$ http,每当我将url粘贴到$ http.get命令中时,我都会在浏览器窗口中输出一个输出。

这是我的服务:

Cannot read property 'get' of undefined
    at Object.getChannelIdFromYoutubeUsername
    at Object.vm.creatorAccountCreationFormSubmit

这是我的控制器:

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;
});

2 个答案:

答案 0 :(得分:2)

angular.module('adsomaApp').service('YoutubeService', function($log, $http) { }

你没有注入服务层,所以它显示了undefin

答案 1 :(得分:1)

两个基本变化:

将$ http注入服务

angular.module('adsomaApp').service('YoutubeService', function($http, $log) {

从此服务方法的参数中删除$ http

function getChannelIdFromYoutubeUsername(youtubeApi, youtubeUsername) {

问题在于,当从Controller调用此服务方法时,您不会发送第三个参数。其中,基本上意味着$ http将为null。 我通过在服务中注入$ http并排除方法签名中的第三个参数来解决这个问题。

这两项变更应该解决这个问题。我没有包含其余的代码。