gpt4 book ai didi

javascript - Angular UI Router 1.0.0 - 使用 $transitions.onBefore 防止路由加载

转载 作者:搜寻专家 更新时间:2023-11-01 04:35:25 25 4
gpt4 key购买 nike

我升级到 UI Router 1.0.0,从 .$on($stateChangeX 变成了 $transitions.onX( ( see $transitions here ).

我需要在导航到页面之前解析用户的个人资料及其访问权限(例如,用户永远不应该看到他们试图转换到的页面)。之前,我能够直接在 state 中使用 resolve 并按顺序传递我需要的东西,例如:

state('my-state', {
...
resolve : {
ProfileLoaded : ['$rootScope', function ($rootScope) {
return $rootScope.loadProfile();
}],
access: ['Access', 'ProfileLoaded', function (Access, ProfileLoaded) {
return Access.hasORRoles(['admin']); //either $q.reject(status code); or "200"
}]
}
})

然后我可以轻松地在 $stateChangeError 中检索错误类型:

app.run(...
$rootScope.$on('$stateChangeError', function (event, toState, toParams, fromState, fromParams, error) {

if (error === 401) {
$state.go('home');
}
...

使用 $transitions,我正在尝试做同样的事情...

.state('user.my-page', {
...
data: {
loadProfile: true,
roles: [
'admin'
]
}
});


app.run(...

$transitions.onBefore({to: profile}, function(trans) {
return loadProfile().then(function (prof) {
var substate = trans.to();
return Access.hasORRoles(substate.data.roles); //either $q.reject(status code); or "200"
});
});

$transitions.onError({}, function(trans) {
var error = trans && trans._error;

if (error == 401) {
$state.go('home');
}
...

所以我的问题是:

onBefore 是否与 resolve 在确保用户无法在检查数据之前导航方面做同样的事情?页面仍在加载,然后在页面加载后使用 $state.go 重定向。

最佳答案

只为还在这里着陆的人。

您可以返回一个 promise 以阻止网站加载。

$transitions.onBefore({}, function(transition) {
return new Promise((resolve) => {
// Do auth..
return Access.hasORRoles(['admin']);
});
});

关于javascript - Angular UI Router 1.0.0 - 使用 $transitions.onBefore 防止路由加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41271974/

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