В 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?

Другие вопросы по тегам