我在 Angular 应用程序中使用 UI 路由。
检查每个州的授权。如果授权,则会抛出自定义错误。我希望 $stateChangeError
处理从 $stateChangeStart
抛出的任何自定义错误。
$stateChangeStart
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState) {
$log.info("Route change start from", fromState.url, "to", toState.url);
$rootScope.isAuthorized = authorize(toState);
if ($rootScope.isAuthorized) {
$log.info('is Authorized')
} else {
$log.info('not Authorized');
throw new AuthorizationError()
}
});
});
自定义错误
function AuthorizationError(description) {
this.message = "Forbidden";
this.description = description || "User authentication required.";
}
AuthorizationError.prototype = Object.create(Error.prototype);
AuthorizationError.prototype.constructor = AuthorizationError;
最佳答案
谢谢大家,找到解决方案了。我正在广播$stateChangeError
来自AuthorizationError
本身。这只是一个解决方法,如果有其他方法可以实现此目的,我将发布答案(除了在 deferred
的 resolve
中拒绝 state
)
function AuthorizationError(description, code) {
this.message = "Forbidden";
this.description = description || "User authentication required.";
this.code = code || 'NOT_AUTHENTICATED';
$rootScope.$broadcast('$stateChangeError', $rootScope.state.to, $rootScope.state.toParams, $rootScope.state.from, $rootScope.state.fromParams, this);
}
<强> rootscope.state
var transitionTo = $state.transitionTo;
$state.transitionTo = function(to, toParams, options) {
var from = $state.$current,
fromParams = $state.params;
to = to.name ? to : $state.get(to);
$rootScope.state = {
to: to.self,
toParams: toParams,
from: from.self,
fromParams: fromParams,
options: options
}
return transitionTo(to, toParams, options)
})
}
}
关于javascript - 抛出自定义错误时触发 $stateChangeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44675211/