Zoeken…


$ Http gebruiken in een controller

De $http service is een functie die een HTTP-verzoek genereert en een belofte retourneert.

Algemeen gebruik

// Simple GET request example:
$http({
  method: 'GET',
  url: '/someUrl'
}).then(function successCallback(response) {
    // this callback will be called asynchronously
    // when the response is available
  }, function errorCallback(response) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });

Gebruik in controller

appName.controller('controllerName',
    ['$http', function($http){

    // Simple GET request example:
    $http({
        method: 'GET',
        url: '/someUrl'
    }).then(function successCallback(response) {
        // this callback will be called asynchronously
        // when the response is available
    }, function errorCallback(response) {
        // called asynchronously if an error occurs
        // or server returns response with an error status.
    });
}])

Methoden voor snelkoppelingen

$http service $http heeft ook snelkoppelingsmethoden. Lees hier meer over http-methoden

Syntaxis

$http.get('/someUrl', config).then(successCallback, errorCallback);
$http.post('/someUrl', data, config).then(successCallback, errorCallback);

Methoden voor snelkoppelingen

  • $ http.get
  • $ http.head
  • $ http.post
  • $ http.put
  • $ http.delete
  • $ http.jsonp
  • $ http.patch

$ Http-verzoek gebruiken in een service

HTTP-verzoeken worden op grote schaal herhaaldelijk gebruikt in elke web-app, dus het is verstandig om een methode te schrijven voor elk gemeenschappelijk verzoek en deze vervolgens op meerdere plaatsen in de app te gebruiken.

Maak een httpRequestsService.js

httpRequestsService.js

appName.service('httpRequestsService', function($q, $http){

    return {
        // function that performs a basic get request
        getName: function(){
            // make sure $http is injected
            return $http.get("/someAPI/names")
                .then(function(response) {
                    // return the result as a promise
                    return response;
                }, function(response) {
                    // defer the promise
                    return $q.reject(response.data);
                });
        },

        // add functions for other requests made by your app
        addName: function(){
            // some code...
        }
    }
})

De bovenstaande service voert een get-aanvraag uit binnen de service. Dit is beschikbaar voor elke controller waar de service is geïnjecteerd.

Voorbeeld gebruik

appName.controller('controllerName',
    ['httpRequestsService', function(httpRequestsService){

        // we injected httpRequestsService service on this controller
        // that made the getName() function available to use.
        httpRequestsService.getName()
            .then(function(response){
                // success
            }, function(error){
                // do something with the error
            })
    }])

Met deze aanpak kunnen we httpRequestsService.js nu altijd en in elke controller gebruiken.

Timing van een $ http-verzoek

De $ http-aanvragen hebben tijd nodig die varieert afhankelijk van de server, sommige kunnen enkele milliseconden duren en sommige kunnen enkele seconden duren. Vaak is de tijd die nodig is om de gegevens van een verzoek op te halen van cruciaal belang. Ervan uitgaande dat de antwoordwaarde een reeks namen is, overweeg dan het volgende voorbeeld:

Niet correct

$scope.names = [];

$http({
    method: 'GET',
    url: '/someURL'
}).then(function successCallback(response) {
            $scope.names = response.data;
        },
        function errorCallback(response) {
            alert(response.status);
        });

alert("The first name is: " + $scope.names[0]);

Toegang tot $scope.names[0] direct onder het $ http-verzoek $scope.names[0] vaak een fout op - deze regel code wordt uitgevoerd voordat het antwoord van de server wordt ontvangen.

Correct

$scope.names = [];

$scope.$watch('names', function(newVal, oldVal) {
    if(!(newVal.length == 0)) {
        alert("The first name is: " + $scope.names[0]);
    }
});

$http({
    method: 'GET',
    url: '/someURL'
}).then(function successCallback(response) {
            $scope.names = response.data;
        },
        function errorCallback(response) {
            alert(response.status);
        });

Met de $ watch- service hebben we alleen toegang tot de $scope.names array als het antwoord is ontvangen. Tijdens de initialisatie wordt de functie aangeroepen, hoewel $scope.names al $scope.names is geïnitialiseerd. Daarom is controleren of de newVal.length anders is dan 0 nodig is. Let op: wijzigingen in $scope.names activeren de watch-functie.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow