在Angular中,有没有办法在$ routeProvider.otherwise被触发时调用代码?

时间:2013-10-21 22:19:45

标签: javascript angularjs angularjs-routing

我知道Angular没有catchall控制器。 E.g:

 $routeProvider.otherwise({
 controller: 'CatchAllCtrl'
 });

但是,如果$ routeProvider.otherwise被触发,有没有办法调用一些代码,所以我至少可以知道否则被调用以及路由是什么?

3 个答案:

答案 0 :(得分:2)

您可以重定向到一个可以执行“其他”逻辑的catchcall路由,然后手动重定向到应用中的实际视图。

$routeProvider
  .when('/', {
    templateUrl: '/partials/index.html', 
    controller: 'homeController'
  })
  .when('/otherwise', {
    controller:  'otherwiseController'
  })
  .otherwise({redirectTo: '/otherwise' });

在您的otherwiseController中,您可以注入$ location,然后设置$location.path("/")以重定向到您想去的任何位置。

你可能需要为/ otherwise路由指定templateUrl(我不确定)。

答案 1 :(得分:1)

您可以收听路由更改并在回调中执行所需的操作。

  $rootScope.$on('$routeChangeSuccess', function() {
    var path = $location.path();
     // this shoudl fire for all routes
  }):

答案 2 :(得分:0)

这里有一个角色的新手,所以用盐来取一些东西:)

难道你不能简单地将你想要执行的代码放在“CatchAllCtrl”中“否则”吗?

或者,您可以在“否则”到达时更新控制变量并使用$scope.watch来捕捉它的变化 How do I use $scope.$watch and $scope.$apply in AngularJS?