ログインしていない場合にユーザーをログインルートにリダイレクトする方法をきれいに実装しようとしています。私は、すぐには機能しない別の SO 回答hereに基づいてソリューションを構築しています。これが私の解決策です。
angular.module('myApp', ['ngResource', 'ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
var requireAuthentication = function () {
return {
load: function ($q) {
console.log('Can user access route?');
if (g_isloggedIn === true) { // fire $routeChangeSuccess
var deferred = $q.defer();
deferred.resolve();
console.log('Yes they can!');
return deferred.promise;
} else { // fire $routeChangeError
console.log('No they cant!');
return $q.reject("'/login'");
}
}
};
};
$routeProvider
.when('/some_page_that_requires_authentication', {
templateUrl: '/views/secret.html',
controller: 'secretCtrl',
resolve: requireAuthentication()
})
.when('/anybody_can_see_me', {
templateUrl: '/views/public.html',
controller: 'publicCtrl',
});
}]);
$routeChangeError
私の質問は、ルートをリダイレクトできるように、イベントをどこで聞くことができるかということです。ディレクティブで実行しようとしましたが、イベントを発生させることができませんでした。promise が拒否されると読み込まれないため、コントローラに配置できません。何かご意見は?