スピナー認証ライブラリを使用したRouteChangeStartにロードします
-
21-12-2019 - |
質問
ホットタオルアンギュラライブラリを使用しています( https://github.com/johnpapa/ hottowel-angular-bower )上級開発者から継承したプロジェクトについて
auth0の認証ライブラリを角度用に組み込んでいます。
認証されたユーザーにいくつかの経路を制限する必要があります。それをするために、私はいくつかのルートプロパティを設定します。
認証されていないユーザーに制限されているルートのisLogin: true
。
認証を必要としていないルート、およびそうでないユーザーの反対側のrequiresLogin: true
。各ランスルーでこれらのプロパティを確認するには、$rootScope.$on('$routeChangeStart' function())
を使用します。
app.run(function ($rootScope, $location, auth, common, config) {
var getLogFn = common.logger.getLogFn,
log = getLogFn('auth handle'),
events = config.events;
$rootScope.$on('$routeChangeSuccess', function (e, nextRoute, currentRoute) {
if (nextRoute.$$route && nextRoute.$$route.settings && nextRoute.$$route.settings.requiresLogin) {
if (!auth.isAuthenticated) {
$location.path('/login');
log('User not authenticated');
}
}
if (nextRoute.$$route && nextRoute.$$route.settings && nextRoute.$$route.settings.isLogin) {
if (auth.isAuthenticated) {
$location.path('/');
log('User is authenticated');
}
}
})
});
.
今、これがホットタオルに含まれるスピナー機能を妨害しているようです。 Sherl.jsでは、次のものがあります。
$rootScope.$on('$routeChangeStart',
function (event, next, current) { toggleSpinner(true); }
);
$rootScope.$on(events.controllerActivateSuccess,
function (data) { toggleSpinner(false); }
);
$rootScope.$on(events.spinnerToggle,
function (data) { toggleSpinner(data.show); }
);
.
スピナーが回転を止めないこと(例えば、コントローラが起動されリセットされているため、vm.isbusy= true)、このようにしてこれを取り組むのでしょうか。
解決
1つの考えは、未許可のアクセスが行われるときに通知するためにイベント($ブロードキャスト)を使用することができ、それがスピナーをオフにするコントローラによって受信されることです。
他のヒント
私はあなたのコードを非常に長く研究していませんが、Spinnerを停止するために$routeChangeSuccess
を使用してはいけませんか?
$scope.isViewLoading = false;
$scope.$on('$routeChangeStart', function() {
$scope.isViewLoading = true;
});
$scope.$on('$routeChangeSuccess', function() {
$scope.isViewLoading = false;
});
. 所属していません StackOverflow