2017-02-12 4 views
0

Ich bin neu in AngularJS und ich versuche, diesen Code zu ändern, meinen Kopf um die Konventionen zu wickeln:AngularJS HTTP Get Scope

https://github.com/flatlogic/angular-material-dashboard/blob/master/src/app/components/services/MessagesService.js

Ich Modifizieren es einen REST-Service zu nutzen, um Nachrichten abrufen, anstatt das Nachrichtenarray zu verwenden.

Hier ist der MessageService Code:

(function(){ 
    'use strict'; 

    angular.module('app') 
     .service('messagesService', [ 
     '$scope', '$http', 
     messagesService 
    ]); 

    function messagesService($scope,$http){ 
    return { 
     loadAllItems : function() { 
     //return $q.when(messages); 
     return $http({ 
      method: 'GET', 
      url: 'http://localhost:3000/messages', 
     }) 
       .then(function(data) { 
        console.log(data); 
        return data; 
       }) 
     } 
    }; 
    } 


})(); 

Aber ich eine Fehlermeldung über den Umfang bekommen:

Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- messagesService 

Antwort

1

Wie Matthew Cawley sagte, können Dienste nicht auf den Bereich zugreifen. Noch können Sie Daten von loadAllItems() wie Sie sind zurückgeben.

Dies ist wahrscheinlich das, was Sie mit einem Controller Beispiel wollen:

(function() { 
    'use strict'; 

    var app = angular.module('app'); 

    app.service('messagesService', ['$http', messagesService]); 

    function messagesService($http) { 
    return { 
     loadAllItems: function() { 
     //This will make the get request and return the promise that $http sends back. 
     return $http({ 
      method: 'GET', 
      url: 'http://localhost:3000/messages', 
     }); 
     } 
    }; 
    }; 

    app.controller('testCtrl', ['$scope', "messagesService", function($scope, messagesService) { 
    //Onload 
    messagesService.loadAllItems().then(function(data) { 
     console.log(data); //Your data from the messageService 
    }, function(err) { 
     console.log(err); //Error from the messageService 
    }); 
    }]); 


}()); 

$http gibt ein Versprechen, dass in Ihrem Controller zugegriffen werden kann. Sie können dann Ihre Variable im Bereich festlegen und die Daten für die Ansicht zugänglich machen.

Ex:

$scope.items = data; innerhalb TestCtrl.

0

alle Ihre Verweise auf $scope aus Nehmen Sie Spielraum nicht spritzen kann in Ein Dienst.