Название говорит все, но более подробно; Я хочу проверить, аутентифицирован ли пользователь, проверяя, доступен ли файл cookie или нет, до того, как звонок $state.go()
, возможно ли установить его глобально и не принуждать его выполнять каждую функцию state.go()
?
ответ
Таким образом, вы можете подключить в $stateChangeStart
событие, которое происходит каждый раз, когда переход составляет около начать. Docs
Вы бы сделать что-то вроде этого:
app.run(['$state', '$rootScope', function ($state, $rootScope) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
// calling event.preventDefault() will prevent the transition, so this is used
// when you want to stop certain transitions.
}
});
В настоящее время существует два варианта изменения, хотите ли вы, чтобы предотвратить маршрут.
Вы можете использовать toState
и fromState
для поиска в словаре маршрутизации.
Вы можете использовать service
или factory
, чтобы изменить, можете ли вы или нет.
Так что, если вы создаете фабрику, это пример, это дает вам понятие:
app.factory('routingLogic', function() {
var singletonShouldRoute = true;
var service = {
canRoute: canRoute,
setCanRoute: setCanRoute
};
return service;
function setCanRoute(shouldRoute) {
singletonShouldRoute = shouldRoute
}
function canRoute() {
return singletonShouldRoute ;
}
}
app.controller('somePage', ['routingLogic', '$state', function (routingLogic, $state) {
var vm = this;
vm.shouldRoute = false;
vm.changeShouldRoute = function() {
routingLogic.setCanRoute(vm.shouldRoute);
}
vm.goNextPage = function() {
$state.go('some page');
}
});
app.run(['$state', '$rootScope', 'routingLogic', function ($state, $rootScope, routingLogic) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
// calling event.preventDefault() will prevent the transition, so this is used
// when you want to stop certain transitions.
if (!routingLogic.canRoute()) { event.preventDefault(); }
}
});
Однако, вы можете переключиться вне canRoute
со словарем:
app.factory('routingLogic', function() {
var allowedRoutes = {
"thisroute": true,
"thatroute": true
}
var service = {
canRoute: canRoute,
setCanRoute: setCanRoute
};
return service;
// you can pull this out to provider level if you want it in the config stage
function setCanRoute(routeName) {
allowedRoutes[routeName] = true;
}
function canRoute(routeName) {
return allowedRoutes[routeName] || false;
}
}
app.run(['$state', '$rootScope', 'routingLogic', function ($state, $rootScope, routingLogic) {
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
// calling event.preventDefault() will prevent the transition, so this is used
// when you want to stop certain transitions.
if (!routingLogic.canRoute(toState)) { event.preventDefault(); }
}
});
Вы можете сделать еще один шаг вперед, если вы хотите разрешить только определенные маршруты маршрутов. Таким образом, вы можете перейти от WizardStep1
к WizardStep2
но не WizardStep3
:
app.factory('routingLogic', function() {
var allowedRoutes = {
"thisroute": ["thatroute", "theOtherRoute"],
"thatroute": ["home"]
}
var service = {
canRoute: canRoute,
setCanRoute: setCanRoute
};
return service;
// you can pull this out to provider level if you want it in the config stage
function setCanRoute(routeName) {
allowedRoutes[routeName] = true;
}
function canRoute(fromRoute, toRoute) {
var allowedTo = allowedRoutes[fromRoute] || [];
return allowedTo.some(function (allowedRoute) { return allowedRoute === toRoute; });
}
}
Вы можете использовать «$ stateChangeStart»
app.run(function($rootScope, $state, Auth) {
$rootScope.$on('$stateChangeStart', function(event, newUrl, oldUrl) {
if (!Auth.isLoggedIn()) {
event.preventDefault();
$state.go('login', {
next: newUrl.name
});
}
});
})
Или вы можете пользователь HTTP-перехватчики для API вызовов
.factory('authInterceptor', ['$q', '$cookieStore', '$location', function($q, $cookieStore, $location) {
return {
// Intercept 401s and redirect you to login
responseError: function(response) {
if (response.status === 401) {
$location.path('/login');
// remove any stale tokens
$cookieStore.remove('token');
}
}
};
}])
Предположим, у вас есть главный модуль
angular
.module('app.core')
.run(appRun);
Вы можете добавить к appRun
функции обработчика состояния меняющийся
$rootScope.$on('$stateChangeStart', function(
evt, toState, toParams, fromState, fromParams
) {
...Do your stuff here...
});
- 1. Как использовать stateprovider в угловом?
- 2. Как вызвать дополнительный SQL перед каждым запросом?
- 3. Как остановить цепочку обещаний при использовании $ state.go() в угловом?
- 4. Можно ли вызвать функцию Javascript перед каждым запросом на сервер?
- 5. Как передать данные из $ state.go() в параметр данных в stateprovider в угловом?
- 6. как вызвать функцию после функции в угловом
- 7. Как вызвать функцию контроллера в угловом JS
- 8. Как я могу консоль $ rootScope перед каждым контроллером в угловом?
- 9. Как решить функцию и вызвать другую функцию в угловом
- 10. Устранение зависимости для $ state.go в Угловом UI-маршрутизаторе
- 11. Как установить некоторые значения в методе после $ state.go в угловом
- 12. Nodemon выполняет функцию перед каждым перезагрузкой
- 13. Как $ state.go()
- 14. Рельсы возвращаются перед каждым вызовом метода перед каждым статическим методом
- 15. Как вызвать метод из ApplicationController перед каждым вызовом метода?
- 16. Как вызвать функцию фрагмента onOptionItemSelected перед Activity?
- 17. Как вызвать функцию перед загрузкой представления?
- 18. Как вызвать функцию javascript перед OnInit() - ASP.NET
- 19. Как вызвать функцию перед перенаправлением запроса
- 20. Как вызвать функцию 1 контроллер в другом в угловом JS
- 21. Dart - Как запустить функцию после или перед каждым тестом?
- 22. Как вызвать функцию контроллера после анимации в угловом JS
- 23. Как вызвать функцию javascript и изменить переменную в угловом контроллере?
- 24. как вызвать функцию, когда ползун останавливается в угловом-rangeslider
- 25. В угловом, как вызвать функцию, определенную внутри контроллера директивы?
- 26. Как вызвать функцию в Угловом каждые 10 секунд
- 27. Как я могу вызвать функцию в угловом регуляторе?
- 28. Как вызвать функцию из импортированного модуля в угловом 2 (машинопись)
- 29. Как передать пользовательские данные в $ state.go() в угловом ui-router?
- 30. Как использовать функцию JQuery в угловом
Вы хотите подключиться к событию '$ stateChangeStart' –
, можно ли его установить глобально? @CallumLinington – Gp17
Вы установили его в точке выполнения вашего приложения –