You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AngularJS路由问题:otherwise语法中的条件路由实现

解决AngularJS路由动态重定向的问题

嘿,我来帮你搞定这个路由重定向的问题!你之前的代码报错,核心原因是在config配置阶段没法直接访问$rootScope——这个阶段Angular还没完成服务实例的初始化,$rootScope还没被创建呢,所以直接调用它肯定会出问题。

正确的解决方案

我们可以给otherwise的redirectTo传入一个函数,这个函数会在路由触发的时候(也就是应用运行阶段)执行,这时候就能正常访问$rootScope了。直接看代码:

project.config(['$routeProvider','$locationProvider', function ($routeProvider,$locationProvider){
  $routeProvider
    .when('/start',{
      templateUrl: 'start.html',
      controller: 'startController'
    })
    .when('/event',{
      templateUrl: 'event.html',
      controller: 'eventController'
    })
    .when('/report',{
      templateUrl: 'report.html',
      controller: 'reportController'
    })
    .otherwise({
      // 用函数动态返回重定向路径
      redirectTo: function($rootScope) {
        return $rootScope.admin === 1 ? '/event' : '/start';
      }
    });
}]);

备选方案(更稳妥的注入方式)

如果遇到直接注入$rootScope不生效的情况,还可以用$injector来手动获取$rootScope:

.otherwise({
  redirectTo: function($injector) {
    var $rootScope = $injector.get('$rootScope');
    return $rootScope.admin === 1 ? '/event' : '/start';
  }
});

额外提醒

要确保$rootScope.admin的值在路由跳转前已经被正确初始化(比如在app的run阶段或者初始化控制器里设置),不然判断逻辑可能会出现不符合预期的结果哦。

内容的提问来源于stack exchange,提问作者Harsha Jasti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:03:29