.$on($stateChangeX
から$transitions.onX(
(see $transitions here)に変更されたUI Router 1.0.0にアップグレードしました。
ユーザーのプロフィールとそのアクセスを解決してからページに移動する必要があります(たとえば、移行しようとしているページが表示されないようにする必要があります)。前に、私は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
でリダイレクトされています。