我在我的项目中使用UI路由器.我的应用程序的主页包含4个选项卡,每个选项卡都路由到不同的模板.这是我当前的路由代码,即使用forEach创建6条路由.
['Draft','Assigned','InProgress','Completed','Rejected','All'].forEach(function (val) { $stateProvider.state({ name: 'root.jobs.list.' + val.toLowerCase(),url: '/' + val.toLowerCase(),views: { 'currentTab': { templateUrl: 'adminworkspace/jobs',controller: 'JobsController' } },data: { userJobsStatus: val } }); });
默认情况下,当用户登录时,它将转到“root.jobs.list.draft”.如何根据登录用户的角色(管理员,用户,文员等)重定向到给定状态.如果要将属于“工程师”或“首席工程师”角色的所有用户重定向到“root.jobs.list.inprogress”
我最初在控制器中有这个,但正如你所看到的,它没有用,因为每次我点击一个标签时,它总是路由回“root.jobs.list.inprogress”
if (user !== undefined) { if (user.BusinessRole == "Engineer" || user.BusinessRole == "Lead Engineer") $state.go('root.jobs.list.inprogress'); }
解决方法
我已经不得不解决这个问题:
$urlRouterProvider.otherwise("/"); $stateProvider.state("default",{ url:"/",templateUrl: "app/core/home/default.html",controller: "DefaultController" });
控制器很简单:
(function () { "use strict"; angular.module("core").controller("DefaultController",[ "$rootScope","$state","roles",function ($rootScope,$state,roles) { if ($rootScope.hasPermission(roles.SomeRoleName)) { $state.go("someStateName"); } else if ($rootScope.hasPermission(roles.SomeRoleName)) { $state.go("someStateName"); } } ]); })();