2017-01-23 56 views
0

每當我運行由angularjs 1.4.3實現的應用程序時。TypeError:通過角度調用API時服務不是函數js

BannerService.js

app.service('BannerService',function ($http) { 

    this.save = function saveBanner(banner) { 
     return $http({ 
       method: 'POST', 
       url: 'http://localhost:8081/api/banners' 
      }); 
    } 

}); 

BannerController.js

app.controller('BannerAddCtrl', ['$scope','$log','BannerService', 
    function ($scope,$log, BannerService) { 
     $scope.save = function() { 
      BannerService.saveBanner(myBanner) 
       .success(function (result) { 
        $log.debug('RESULT', result); 
       }, function (reason) { 
        $log.debug('REASON', reason); 
       }); 
     } 

}]);

和index.html

<div class="modal-footer"> 
    <button type="button" class="btn btn-primary btn-block" ng-click="save()">Save Banner</button> 

    </div> 

它拋出如下異常:

TypeError: BannerService.saveBanner is not a function 
at ChildScope.$scope.save (bannerControllers.js:64) 
at fn (eval at compile (angular.js:13145), <anonymous>:4:203) 
at callback (angular.js:23298) 
at ChildScope.$eval (angular.js:15846) 
at ChildScope.$apply (angular.js:15945) 
at HTMLButtonElement.<anonymous> (angular.js:23303) 
at HTMLButtonElement.dispatch (jquery.js:4435) 
at HTMLButtonElement.elemData.handle (jquery.js:4121) 

有人可以幫助我,爲什麼我得到的錯誤。非常感謝你的時間。

回答

4

看看錯誤消息:

BannerService.saveBanner is not a function 

基本上,你的應用程序正在尋找分配給您的服務屬性saveBanner。但目前你還沒有宣佈這樣的財產。相反,您的服務包含一個名爲save的屬性,它定義了一個函數(稱爲saveBanner)。

AngularJS不關心分配給屬性的命名函數。相反,您必須調整屬性名稱本身。所以你的服務的功能/財產應該是這樣的。

this.saveBanner = function() { ... } 
+0

謝謝它對我有用。 –

+0

很高興我能幫到你。獲得標記爲正確回答將是很好,但。 :) – Aer0

0

寫下你的服務如下。

var self = this; 
self.saveBanner = function() { ... } 
0

您在控制器中的保存功能實際上並未在您的服務中調用該功能。

app.service('BannerService',function ($http) { 
     return { 
      saveBanner: function(banner) { 
       return $http({ 
         method: 'POST', 
         url: 'http://localhost:8081/api/banners' 
        }); 
        } 
       } 
});