2015-10-27 2 views
1

Это моя первая попытка написать услугу в AngularJS. У меня есть служба, в которой у меня есть функция. Когда я вызываю эту услугу с моего контроллера, она говорит, что функция XXXService.XXX не является функцией.angularjs XXXService.XXXфункция не является функцией

My Javascript нравится,

var sharecycle0_angularfire = angular.module("sharecycle0_angularfire", []); 

sharecycle0_angularfire.service("baseHttp", function($http, $q){ 


    self.getFire = function(){ 

     var deferred = $q.defer(); 

     $http({ 
     method: GET, 
     url: "https://boiling-inferno-1234.firebaseio.com/Cat" 
     }).then(function(response){ 
     deferred.resolve(response); 
     },function(response){ 
     deferred.reject(resposne); 
    }); 

    return deferred.promise; 

    }; 

}); 

sharecycle0_angularfire.controller("angularfirecontroller", function($scope, baseHttp, $window){ 

    $scope.fireClick = function(){ 

     baseHttp.getFire() 
     .then(
      function(response) 
      { 
       $("<div/>").text(response).appendTo($("#successData")); 
      }, 
      function(response) 
      { 
       $window.alert("error: "+response); 
      } 
    ); 

    }; 

}); 

Мой HTML, как,

<body ng-controller="angularfirecontroller"> 
    <button id="fireClickButton" ng-click="fireClick()">fireClick</button> 
    <div id="successData"/> 
</body> 

Я ожидаю, что сервисный код для запуска на мою кнопку удара.

+0

Вы никогда не возвращаются 'getFire', поэтому ваш' baseHttp.getFire() 'никогда не будет работать. –

ответ

1

У вас есть какие-то проблемы здесь, вы не крепление функции getFire к экземпляру службы, вместо этого вы подключаете его к глобальному переменному self. self глобальная переменная, как правило, является псевдонимом для оконного объекта во многих браузерах, поэтому вы присоединяете функцию к окну, а не к экземпляру контроллера. Поскольку http уже возвращает обещание, вам не нужно создавать отложенный объект там, вместо этого просто верните результат $http. Кроме того, GET должно быть строковым значением, вы пытаетесь использовать неопределенную переменную GET, а не "GET". Много раз размещение журнала отладки в соответствующих областях кода поможет вам диагностировать проблему.

Все, что вам нужно:

sharecycle0_angularfire.service("baseHttp", function($http, $q){ 
    this.getFire = function(){ 
     return $http({ 
     method: 'GET', 
     url: "https://boiling-inferno-1234.firebaseio.com/Cat" 
     }); 
    } 
}); 

если вы намеревались кэшировать this, то вы должны создать локальную переменную и присвоить this к этому.

т.е.

sharecycle0_angularfire.service("baseHttp", function($http, $q){ 
    var _this = this; //Or var self = this 
    _this.getFire = function(){ 
     return $http({ 
     method: 'GET', 
     url: "https://boiling-inferno-1234.firebaseio.com/Cat" 
     }); 
    } 
}); 
+0

Спасибо. Это работает. – Bigman

+0

@Bigman Добро пожаловать .. :) – PSL

Смежные вопросы