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
相关产品推荐
相关产品推荐

