[英]How to do default load a default child route in angular 1.5 using ui-router
[英]ui-router: default route based on user role
我在我的项目中使用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");
}
}
]);
})();
如果默认状态的链接对于每个角色都是相同的,例如admin和user的 / user / home 。 我们可以做的一件事是根据角色在应用程序的默认状态下显示不同的html模板。 ui-router提供@stateProvider服务,该服务具有propertyProvider和ControllerProvider属性。 我们可以使用它们来确定我们想要使用哪个模板和控制器用于相同的默认状态。 这是文档链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.