2016-02-24 95 views
0

我是angularJS中的新成員,並且嘗試創建服務來處理HTTP請求。在angularJS中提供服務的困難

因此,這裏是我的服務:

var app = angular.module("myApp", ['base64']); 

/* Main controller 
================================================== */ 

app.controller("MainCtrl", ["$scope", "HTTPrequest", 
    function($scope, HTTPrequest) { 
     $scope.data = HTTPrequest.getAllVideos(); 
    } 
]); 

/* Service which handles HTTP requests 
================================================== */ 

app.service("HTTPrequest", [ "$http", "$base64", 
    function($http, $base64) { 

     //Getter pour la variable videos 
     this.getAllVideos = function($http, $base64) { 

      // Authentification for HTTP request on RESTHeart server 
      $http.defaults.headers.common["Authorization"] = 'Basic ' + $base64.encode("LOGIN" + ":" + "PASSWORD"); 

      $http({ 
       method: 'GET', 
       url: 'http://localhost/db/videos', 
      }).then(
       function successCallback(response) { 
       var videos = response.data; 
       return videos; 
       }, 
       function errorCallback(response) { 

       } 
      ); 

     }; 

    } 
]); 

而在我的Chrome瀏覽器的控制檯我有這樣的錯誤,指的是身份認證線:

TypeError: Cannot read property 'defaults' of undefined

我成功做不服務我的要求,但不可能用服務重現:(

感謝您的幫助

回答

1

更改

this.getAllVideos = function($http, $base64) { 

this.getAllVideos = function() { 

你不想得到的視頻時傳遞任何參數。 $ http和$ base64服務被注入到服務構造函數中。

你也忘了從你的函數返回。更換

$http({ 

通過

return $http({ 

一旦做到這一點,替代

$scope.data = HTTPrequest.getAllVideos(); 

通過

HTTPrequest.getAllVideos().then(function(videos) { 
    $scope.data = videos; 
}); 

你也應該刪除從$空eror回調HTTP呼叫。閱讀http://blog.ninja-squad.com/2015/05/28/angularjs-promises/,因爲你陷入了許多承諾陷阱。

+0

謝謝,它解決了這個問題。我再也沒有這個錯誤了。我沒有我的結果,但它可能來自其他地方! – ImbaBalboa

+0

非常感謝您的編輯,它的工作原理!我仍然很難理解angularJS哲學......(Merci puisquefrançais;)) – ImbaBalboa