我在我的项目中使用 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”。如何根据登录用户的 Angular 色(管理员、用户、文员等)重定向到给定状态。如果要将属于“工程师”或“首席工程师” Angular 色的所有用户重定向到 “root.jobs.list.inprogress”
我最初在 Controller 中有这个,但如您所见,它不起作用,因为每次我点击一个选项卡,它总是路由回 "root.jobs.list.inprogress"强>
if (user !== undefined) {
if (user.BusinessRole == "Engineer" || user.BusinessRole == "Lead Engineer")
$state.go('root.jobs.list.inprogress');
}
最佳答案
我已经不得不解决这个问题了:
我已经注册了一个仅用于处理基于 Angular 色的默认页面的状态。
$urlRouterProvider.otherwise("/");
$stateProvider.state("default", {
url:"/",
templateUrl: "app/core/home/default.html",
controller: "DefaultController"
});
Controller 很简单:
(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");
}
}
]);
})();
关于javascript - 用户界面路由器 : default route based on user role,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37003470/