gpt4 book ai didi

angularjs - Angular UI-Router,访问父状态并将用户动态重定向到某个子状态

转载 作者:行者123 更新时间:2023-12-04 04:11:05 24 4
gpt4 key购买 nike

我有一个主要状态,可以通过访问URL http://myapp/validate来达到。

到达此URL后,在 Controller 内部进行权限检查,并将用户重定向到两个子状态之一。

可以满足80%的要求,但可以使用某些资源,并在我的应用程序中引起少量闪烁,因为基本上我加载了一个我不使用的 View 。

有没有更好的方法来实现这一目标?

有任何想法吗?

angular.module('app.validate').config(['$stateProvider', function($stateProvider) {
$stateProvider
.state('validate', {
url: '/validate',
template: '<ui-view/>',
controller: ['$state', 'HasPermission', function ($state, HasPermission) {

// Here is where I do my logic.

if (HasPermission.get('can-lock-as-admin')) {
$state.go('validate.lock-as-admin');
}

if (HasPermission.get('can-lock-as-clerk')) {
$state.go('validate.lock-as-clerk');
}
}]
})
.state('validate.lock-as-admin', {
templateUrl: 'theUrl',
controller: 'ValidateLockAdminCtrl'
})
.state('validate.lock-as-clerk', {
templateUrl: 'theUrl',
controller: 'ValidateLockClerkCtrl'
})
.state('validate.commit', {
templateUrl: 'theUrl',
controller: 'ValidateCommitCtrl'
});
}]);

最佳答案

闪烁是由于您实际上是在让用户将http://myapp/validate移动到正确的路径之前让其访问。
您可以通过将他重定向到正确的路径而不显示父路由来避免这种情况。

app.run(function($rootScope){

$rootScope.$on('$stateChangeStart',
function(e, toState, toParams, fromState, fromParams), {
if(toState.name === 'validate') { // some conditional
e.preventDefault(); // This tells the app not to move to the validate route

if (HasPermission.get('can-lock-as-admin')) {
$state.go('validate.lock-as-admin');
}
if (HasPermission.get('can-lock-as-clerk')) {
$state.go('validate.lock-as-clerk');
}
}
});
});

});

为了获得更干净的解决方案,您可以使用 resolve块来检查权限,但是我对此并不是100%的,并且我现在没有时间检查它。
我建议您看看 this article,因为它很好地说明了类似的情况。

关于angularjs - Angular UI-Router,访问父状态并将用户动态重定向到某个子状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27318639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com