В Angular есть ли способ вызова кода при запуске $routeProvider.otherwise?
Я знаю, что для Angular нет контроллера для перехвата. Например:
$routeProvider.otherwise({
controller: 'CatchAllCtrl'
});
Однако есть ли способ вызвать некоторый код, если запущен $routeProvider.otherwise, чтобы я мог, по крайней мере, знать, что было вызвано в противном случае и каков был маршрут?
3 ответа
Вы можете перенаправить на маршрут catchcall, который может выполнить вашу логику "иначе", а затем вручную перенаправить на фактический вид в вашем приложении.
$routeProvider
.when('/', {
templateUrl: '/partials/index.html',
controller: 'homeController'
})
.when('/otherwise', {
controller: 'otherwiseController'
})
.otherwise({redirectTo: '/otherwise' });
В вашем противном случае вы можете ввести $location, а затем установить $location.path("/")
перенаправить туда, куда вы хотите пойти.
Возможно, вам понадобится указать templateUrl для маршрута / else (я не уверен).
Вы можете прослушать изменение маршрута и выполнить требуемое действие в обратном вызове.
$rootScope.$on('$routeChangeSuccess', function() {
var path = $location.path();
// this shoudl fire for all routes
}):
Какая-то угловатая новичок тут, так что бери все с солью:)
Разве вы не можете просто поместить код, который вы хотите выполнить в "иначе" внутри "CatchAllCtrl"?
Или, может быть, вы можете обновить управляющую переменную всякий раз, когда вы достигнете "иначе" и использовать $scope.watch
чтобы поймать это изменение Как использовать $scope.$watch и $scope.$apply в AngularJS?