如果控制器返回false,我在控制器中有userAccess
标志我希望从用户隐藏所有应用程序并将用户重定向到access.html
,并且需要一些访问权限形式所以使用下面的代码会抛出错误{{1}任何想法如何用angularjs transition superseded
来实现这个任务?
mainCtrl.js
ui.router
app.js
$scope.cookie = $cookies.get(jklHr');
var parts = $scope.cookie.split("|");
var uidParts = parts[7].split(",");
$scope.newUser._id = uidParts[0];
var userAccess = AuthService.getCurrentUser($scope.newUser._id);
if(!userAccess) {
console.log("Access Deinied");
$state.go('app.access');
}
答案 0 :(得分:0)
创建一个拦截器,所有的http类都会抛出拦截器。执行“解析”部分并返回401后,您可以重定向到登录屏幕或403转到禁止视图。
答案 1 :(得分:0)
问题是您正在尝试更改状态,而之前的状态更改仍在进行中。 ui-router具有状态更改开始和结束时的事件。
$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams) {
});
所以你的重定向应该在那里。无论如何,我建议你将用户检查移到应用程序的更高级别,例如.run(),登录状态有一些例外。这样你就不必单独检查每个控制器。
答案 2 :(得分:0)
确保您拥有最新版本的angularjs&角UI。如果您使用的是旧版本,请检查angular-ui版本与角度版本的兼容性。 https://github.com/angular-ui/ui-router/issues/3246 如果这不起作用,请在app.config
中添加以下行$qProvider.errorOnUnhandledRejections(false)
不要忘记在配置功能中添加依赖项$qProvider
。