AngularJS 패키지$http.post()인 스 턴 스 상세 설명
3680 단어 AngularJS$http.post()
오래 걸 리 지 않 아 모 바 일 앱 프로젝트 를 따라 잡 았 습 니 다.ionic+AngularJS+cordova 프레임 워 크 를 사 용 했 습 니 다.그 사이 에 많은 문제 가 발생 했 습 니 다.그 중 하 나 는 Ajax 에 대한 패 키 징 문제 입 니 다.
사실은 포장 문제 에 대해 계속 이 야 기 를 멈 추 지 않 았 습 니 다.서로 다른 프로젝트 도 서로 다른 수요 가 있 습 니 다.전형 적 인 예 를 들 어 제 가 이 프로젝트 를 할 때 처음에 포장 문 제 를 고려 하지 않 았 기 때문에 비판 을 받 았 습 니 다.제 친 구 는 포장 을 해서 비판 을 받 았 습 니 다.어색 하지 않 습 니까?
그렇다면 이 문 제 를 봉인 해 야 하 는 지 에 대해 서 는 어떻게 정 해 야 할 까?사실은 이것 은 매우 복잡 한 문제 가 아니다.결국은 수익 비율의 문제 이다.만약 에 프로젝트 규모 가 크 지 않 으 면 포장 문 제 를 너무 많이 고려 하 는 것 자체 가 의미 가 없고 프로젝트 에 대한 수익 이 매우 낮다.그리고 규모 가 큰 프로젝트 에 있어 포장 하지 않 으 면 잠재 적 인 위험 이 훨씬 높 기 때문에 전기의 투입 도 가치 가 있다.
물론 이 문 제 는 내 가 이렇게 분명하게 설명 할 수 있 는 일이 아니다.오늘 은 포장 을 고려 하면 내 가 어떻게 처리 할 지 말 해 보 자.
angularjs 에서 서비스 http 를 제 공 했 습 니 다.이것 은 Ajax 요청 을 처리 하 는 데 사 용 됩 니 다.여기 서 저 는 독자 가 angularjs 를 알 고 있다 고 가정 하기 때문에 주 제 를 향 해 달 려 갑 니 다.post 요청 에 대해 봉인 을 어떻게 처리 해 야 합 니까?우선 저 는 모든 사용자(프로젝트 팀 구성원)의 개성 화 된 수 요 를 배제 할 수 있 는 지 확인 해 야 합 니 다.만약 내 가 할 수 없다 면,나 는 인 터 페 이 스 를 열 어야 만 post 를 복원 할 수 있 기 때문에 http.post()로 출구 가 필요 합 니 다.
두 번 째,나 는 모든 사용자 가 응답 이 올 때 결 과 를 어떻게 처리 하 는 지 고려 해 야 한다.success 와 error 두 가지 상황 에 대해 나 는 그들 에 게 처리 논리의 입 구 를 제공 해 야 한다.
위의 두 가 지 를 종합해 보면 저 는 생각 이 있 습 니 다.저 는 서비스(공공 서비스)를 정의 하고 my Post 방법 을 제공 해 야 합 니 다.그 중에서 저 는 사용자 가 응답 하 는 리 셋 을 정의 하 는 것 을 허락 합 니 다.그리고 저 는 그들 이 더욱 자 유 롭 게 처리 방식 을 얻어 그들 에 게 원래 의 post()를 제공 하도록 허락 합 니 다.다행히 js 는 충분히 유연 하기 때문에 나 는 이렇게 쓸 수 있다.
service('myHttpService', ['$http', function ($http) {
var myHttpPost = function (url, data, successFn, errorFn) {
}
return {
myHttp: function (url, data, successFn, errorFn) {
return myHttpPost(url, data, successFn, errorFn);
}
}
}]);
위 와 같이 저 는 return 내부 에서 정의 하 는 방법 을 사용 할 것 입 니 다.이 방법 은 사용자 가 successFn 과 errorFn,즉 성공 과 실패 의 리 셋 을 정의 할 수 있 습 니 다.그러면 사용 자 는 안심 하고 데이터 의 처리 논 리 를 미리 작성 할 수 있 고 다른 세부 사항 에 관심 을 가 질 필요 가 없습니다.또한 저 는 사용자 가 더욱 유연 한 post()를 받 도록 허락 합 니 다.그러면 저 는 이렇게 이 루어 집 니 다.
var httpPromise = $http.post(url, data, {timeout: 30000});
if (!angular.isDefined(successFn)) {
return httpPromise;
}
만약 사용자 가 성공 적 으로 리 셋 되 었 다 고 정의 하지 않 았 다 면,좋 습 니 다.이 패 키 지 는 존재 하지 않 는 다 고 생각 하고,저 는 post()를 버 리 고 호출 자가 스스로 처리 하 겠 습 니 다.호출 자가 미리 정 의 를 내 리 려 면 패키지 에서 논 리 를 잘 처리 해 야 합 니 다.
return httpPromise.then(
function (response) {
if (response.status) {
return successFn(response);
} else {
/* */
}
},
function (error) {
if (!angular.isDefined(errorFn)) {
/* */
} else {
return errorFn(error);
}
},
function () {
/* */
}
)
이렇게 http.post()에 대한 패 키 징 은 기본적으로 완 성 된 셈 입 니 다.그 중 하 나 는 내 가 successfn 을 처리 할 때 angular.isDefined()로 호출 자가 리 셋 을 정 의 했 는 지 여 부 를 판단 했다 면,그렇지 않 으 면 호출 자 에 게 처리 권 리 를 맡 기 고,내 가 대신 처리 할 것 이 라 고 정의 했다 면 주의해 야 할 부분 이 있다.그 중에서 then()방법 은 비교적 재 미 있 습 니 다.http 방법 은 promise 대상 으로 돌아 가기 때문에 응답 이 돌아 올 때 then()을 통 해 응답 을 처리 할 수 있 습 니 다.사실은 promise.success()와 promise.error()를 통 해 서로 다른 응답 상태의 리 셋 을 처리 할 수 있 지만 then()을 사용 하 는 것 이 좋 습 니 다.완전한 응답 대상 을 받 았 기 때 문 입 니 다.한편,success()와 error()는 응답 대상 을 분석 하고 구체 적 인 차 이 는 독자 가 console 을 통 해 질 수 있다.이상 은 제 가$http.post()에 대한 간단 한 포장 입 니 다.비록 누추 하지만 대부분의 상황 에 대처 할 수 있 고 더 자 유 롭 게 처리 하 는 방식 을 보류 하 였 습 니 다.저 와 함께 토론 해 주신 친구 들 에 게 감 사 드 립 니 다.이번 포장 에 대해 함께 토론 해 주 셔 서 많은 것 을 얻 었 고 그의 친구 에 게 도 모든 도움 을 주 셨 으 면 합 니 다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AngularJS의 ng-options best practise쓸데없는 말은 하지 말고 바로 코드를 찍어라. 리소스를api에 직접 전달하지 말고 문자열이나 정형(예를 들어 귀속된ng-model="selected")을 권장합니다 angular에서 생성된 의value가 무엇인지, ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.