私の問題は、実際にはここにあるものと非常によく似ています。
つまり、$routeChangeStart を使用し、$location を使用して現在のルートを変更しようとしています。すると、元のページがまだ読み込まれており、新しいページによってすぐに上書きされることがコンソールに表示されます。
提供された解決策は、$routeChangeStart の代わりに $locationChangeStart を使用することでした。これは、余分なリダイレクトを防ぐために機能するはずです。残念ながら、ルートを変更するときにアクセスする必要がある $routeprovider の追加データを使用しています (ページ制限を追跡するために使用します)。ここに例があります...
$routeProvider.
when('/login', { controller: 'LoginCtrl', templateUrl: '/app/partial/login.html', access: false}).
when('/home', { controller: 'HomeCtrl', templateUrl: '/app/partial/home.html', access: true}).
otherwise({ redirectTo: '/login' });
$rootScope.$on('$routeChangeStart', function(event, next, current) {
if(next.access){
//Do Stuff
}
else{
$location.path("/login");
//This will load the current route first (ie: '/home'), and then
//redirect the user to the correct 'login' route.
}
});
$routeChangeStart を使用すると、"next" パラメーターと "current" パラメーター ( AngularJS - $routeを参照) をオブジェクトとして使用して、'access' 値を取得できます。$locationChangeStart を使用すると、これら 2 つのパラメーターはオブジェクトではなく URL 文字列を返します。したがって、「アクセス」値を取得する方法はないようです。
$locationChangeStart のリダイレクト停止機能と $routeChangeStart のオブジェクトの柔軟性を組み合わせて、必要なものを実現する方法はありますか?