私はAngular 1.5.8
とangular-ui-router 0.3.2
を使用しています。 すべてのルート変更で認証方法を解決する必要があります。角度ui-routerは、ルート前に約束を待っています
App.run
//check permissions
$rootScope.$on('$stateChangeStart', function (evt, toState) {
if ($localStorage.token || toState.authenticated) {
$http.defaults.headers.common = {
'Authorization': 'Token ' + $localStorage.token,
'Accept': 'application/json'
};
permissionAPI.me()
.then(function(data){
$rootScope.user = data;
})
.catch(function(){
if(toState.authenticated) {
$rootScope.logout();
}
})
}
else {
if(toState.authenticated) {
$rootScope.logout();
}
}
});
`
でこれを作成したように、各ルートのresolveプロパティを追加したいいけない
約束permissionAPI.me()
が解決され、後でエラーが発生する。
ルートがその約束の直後に有効になるようにするにはどうすればよいですか?
$stateChangeStart
からその約束を渡すことで、すべてのルートにメインresolve
をどのようにすることができますか?
ありがとうございました!
によって達成されます。これは、約束が開始された後、常に約束されます。約束が解決されたときではありません。これを処理する標準的な方法は、その下にあるすべてのルートに対して 'resolve'を持つ抽象ルートを作成することです。残念なことに、本質的に同期機能として非同期であるPromiseを使用しようとすることは、妥当な解決策ではありません。 – Claies
'$ stateChangeStart'からその約束を関数に解決するにはどうすればいいですか? –
https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views#inherited-resolved-dependencies – Claies