수색…


컨트롤러 내에서 $ 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.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]);

$ 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 가 0과 newVal.length 확인해야합니다. $scope.names 를 변경하면 watch 함수가 실행됩니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow