UI 라우터 해결 함수의 처리 오류입니까?(일명 $state)ChangeError) 데이터를 오류 상태로 전달하시겠습니까?
내 안에Angular응용 프로그램 I는 경유로 루트/상태를 처리합니다.ui-router모든 것이 잘 되면, 그것은 훌륭하다.그러나 내부에서 발생하는 오류를 처리하는 좋은 방법은 무엇입니까?resolve기능하고 있습니까?
현재 솔루션:전용이 있습니다.error상태(일반과 유사)404.html)는 다음과 같습니다.
// inside config()
.state('error', {
url: '/error',
controller: 'ErrorCtrl',
templateUrl: 'error.html' // displays an error message
})
내부에서 오류가 발생한 경우resolve방송으로 잡습니다.$stateChangeError단위는 mrun기능:
angular.module('myModule').run(function($state) {
$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
event.preventDefault();
$state.go('error');
});
});
이것은 동작합니다만, 에러 메세지를 변경해 주세요.'error.html'에러에 의존합니다.저는 이 모든 것을 오염시키고 싶지 않습니다.$rootScope그리고 나는 그것을 하고 싶다.ui-routeresk way.
현재의 솔루션에서는$stateParams에러 데이터에 대해서error상태. 단, 이 경우 JSONified 쿼리 파라미터를 사용하여 매우 추악한 URL을 얻어야 합니다.
// inside config()
.state('error', {
url: '/error?data&status&config', // accept these three params
controller: 'ErrorCtrl',
templateUrl: 'error.html' // displays an error message
})
angular.module('myModule').run(function($state) {
$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
event.preventDefault();
$state.go('error', JSON.stringify(error)); // error has data, status and config properties
});
});
질문 다른 방법으로 통과할 수 있는 방법이 있습니까?error내 의견에 반대하다error어떤 상태입니까? (주의:나의error오브젝트는 단순한 문자열이 아니라 복잡합니다.)
나에게 효과가 있었던 전략은 그 모든 것을resolve함수는 다음 오류 개체와의 거부된 약속을 반환합니다.
$stateProvider.state('needs_authentication', {
url: '/auth',
resolve: {
user: function ($q, authService) {
if (authService.isAuthenticated()) {
...
}
else {
var errorObject = { code: 'NOT_AUTHENTICATED' };
return $q.reject(errorObject);
}
}
}
});
이렇게 하면$stateChangeError함수는 특정 오류 조건을 처리할 수 있습니다.
$rootScope.$on('$stateChangeError', function (evt, toState, toParams, fromState, fromParams, error) {
if (angular.isObject(error) && angular.isString(error.code)) {
switch (error.code) {
case 'NOT_AUTHENTICATED':
// go to the login page
$state.go('login');
break;
default:
// set the error object on the error state and go there
$state.get('error').error = error;
$state.go('error');
}
}
else {
// unexpected error
$state.go('error');
}
});
오류 컨트롤러 또는 onEnter 메서드 오류 상태에서 액세스해야 하는 서비스를 통해 데이터를 전달할 수 있습니다.
또는, 에러 상태를 「풍부하게」 할 수도 있습니다.각진 방식이 아닐 수도 있지만, 내 말은:
$rootScope.$on('$stateChangeError', function (event, toState, toParams, fromState, fromParams, error) {
event.preventDefault();
$state.get('error').error = { code: 123, description: 'Exception stack trace' }
return $state.go('error');
});
에러 상태의 설정에서는, 다음과 같이 됩니다.
.state('error', {
url: 'error',
resolve: {
errorObj: [function () {
return this.self.error;
}]
},
controller: 'ErrorCtrl',
templateUrl: 'error.html' // displays an error message
});
도움이 되었으면 좋겠다
url: 옵션 전체를 삭제하고 params: 옵션만으로 대체할 수 있습니다.
.state('error', { abstract: false, templateUrl: templateFor('error'), controller: controllerFor('error'), params: { 'error': 'An error has occurred' }, resolve: { error: [ '$stateParams', function ($stateParams) { return $stateParams.error; } ] } })
여기서 추악한 URL은 없어지고 컨트롤러는 에러를 파라미터로 취득할 수 있습니다.
언급URL : https://stackoverflow.com/questions/22936865/handling-error-in-ui-routers-resolve-function-aka-statechangeerror-passing-d
'programing' 카테고리의 다른 글
| 배송 메서드를 가져오는 동안 Woocommerce가 빈 어레이 목록을 반환하는 중 (0) | 2023.03.15 |
|---|---|
| 데이터를 복사하지 않고 Oracle 테이블의 복사본을 만들려면 어떻게 해야 합니까? (0) | 2023.03.15 |
| 봄 프로젝트 실가동 코드용 RestTemplate vs Apache Http Client (0) | 2023.03.15 |
| AngularJS : ng클릭으로 변수값을 설정할 수 없습니까? (0) | 2023.03.15 |
| 코드에 JSON 문자열 값을 어떻게 쓰나요? (0) | 2023.03.15 |