Поиск…


Использование $ http внутри контроллера

Служба $http - это функция, которая генерирует 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.
  });

Использование внутри контроллера

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.
    });
}])

Методы быстрого доступа

$http службы $http также есть методы быстрого доступа. Читайте о http-методах здесь

Синтаксис

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

Методы быстрого доступа

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

Использование запроса $ http в службе

HTTP-запросы широко используются в каждом веб-приложении, поэтому целесообразно написать метод для каждого общего запроса, а затем использовать его в нескольких местах в приложении.

Создайте 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...
        }
    }
})

Служба, указанная выше, выполнит запрос на получение внутри службы. Это будет доступно любому контроллеру, где была введена услуга.

Пример использования

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
            })
    }])

Используя этот подход, мы теперь можем использовать httpRequestsService.js в любое время и в любом контроллере.

Сроки запроса $ http

Запросы $ http требуют времени, которое зависит от сервера, некоторые могут занять несколько миллисекунд, а некоторые могут занять до нескольких секунд. Часто требуется время, необходимое для извлечения данных из запроса. Предполагая, что значение ответа представляет собой массив имен, рассмотрим следующий пример:

некорректный

$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]);

Доступ к $scope.names[0] прямо под запросом $ http часто $scope.names[0] ошибку - эта строка кода выполняется до получения ответа от сервера.

Правильный

$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);
        });

Используя службу $ watch, мы получаем доступ к массиву $scope.names только при получении ответа. Во время инициализации функция вызывается даже при инициализации $scope.names , поэтому проверка того, newVal.length ли newVal.length , отличная от 0. Имейте в $scope.names - любые изменения, внесенные в $scope.names функцию часов.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow