私は、アクセスを確認するルート変更でサービスを呼び出そうとしています。true
がルートを開きます。そうでなければ、設定ルートに移動しますui-routerで解決済みの状態に戻ることはできません
app.js:私のhomeCtrlで
.state('home', {
url: '/home',
templateUrl: 'home.html',
controller: 'homeController',
resolve: {
access: function(AuthService) {
return AuthService.getAccess();
}
}
})
:私はどんな決意を持っていない別の状態に切り替えると、私はホームページに
app.controller('homeController', function ($scope, $timeout, $state, UserService, GroupService, SiteService, HomeService, AuthService, access) {
// Check access: if true init route, else go to settings
if(access) {
Collections.init();
} else {
$state.go('settings');
}
});
を戻すことはできません、ボタンはちょうどd今は何もしません。
また、代わりにhomeCtrlからの設定に再方向を扱う、私は解決からこれを行うだろうか、それは角度の1.5.xおよびUI-ルータ0.2を使用して、より良いアプローチ
ではないでしょう私は決意を使用していませんでしたが、代わりに私がしかし気づいた何
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
AuthService.getAccess().then(function (access) {
if (!access && toState.name !== "settings") {
event.preventDefault();
toastr.warning('Your trial has expired');
$state.go('settings');
}
});
});
は私のUIがsometi時にロードすることである前に
:0.18
EDIT authService.getAccess()が実行される前に、私は競合状態に陥っていました。
解決フローに移動したので、アプリケーションフローをより適切に制御できました。
を成功し、リダイレクトする必要があるかどうかを決定するために、私は前にこのような何かを持っていたが、私はレースでしょう私は、状態がロードされる前に 'getAccess() 'が確実に終了するように解決しました。 – Batman
はい、 'getAccess'は非同期で動作しているので、この場合は動作しません。私はビットを –
@Batmanの解決策を編集し、解決策を更新します - それが助けられているかどうか、それをチェックし、私に知らせてください。 –