0
각도 응용 프로그램에 숨겨진 페이지가 있으므로 특수 ID 사용자 만 액세스 할 수 있습니다. 그것을 구현하기 위해 상태가 그 숨겨진 상태로 바뀔 때 HTTP가 서버에 요청을 보냅니다 (서버 만이 특별한 id를 알고 있기 때문에).상태가 변경 될 때까지 약속을 해결하십시오.
그리고 서버가 오류 메시지와 함께 응답하면 상태 변경 프로세스가 중지되고 다른 경우 사용자는 해당 특수 페이지로 이동합니다. 서비스
angular
.run(["$rootScope", "$location", "$state", "mySvc", function ($rootScope, $location, $state, mySvc) {
var id = mySvc.getId();
$rootScope.$on('$stateChangeStart', function(event, toState , toParams, fromState, fromParams) {
if(toState.name === "specialstate") {
mySvc.check(id)
.then(function(result) {
if(result.error !== 0) {
event.preventDefault();
}
}, function(error) {
event.preventDefault();
});
}
});
}]);
기능 :
function check(id) {
var deferred = $q.defer();
$http({
url: "/api/url",
method: "GET",
headers: {'Content-Type': 'application/json'}
}).
then(function (result) {
console.log(result);
if(result.data.error === 0) {
deferred.resolve(result.data);
}
else {
deferred.reject(result.data);
}
}, function (error) {
deferred.reject(error);
});
return deferred.promise;
};
모든 것이 한 가지를 제외하고, 권리 : 상태는 요청 결과를 기다리지 않고 변경되는 다음
내가 사용하고있는 코드입니다. 내가 해결 방법을 사용해야한다고 생각하지만 제대로 사용하는 방법을 모르겠습니다.감사합니다.
약속은'$ stateChangeStart' 이벤트 핸들러가 실행을 마친 후에 오랫동안 해결 될 것입니다. 그때까지는'event.preventDefault()'를 너무 늦게 호출 할 것이고 효과가 없을 것이다. 이 방법이 효과가 없기 때문에 접근 방법을 다시 생각해 봐야한다고 생각합니다. – JLRishe