ui 路由器嵌套视图条件
ui router nested views condtions
是否可以在 ui 路由器中创建带条件的嵌套视图?
条件分配给用户角色。
例如我有两种类型的用户:admin 和 user。
如果用户正在打开设置页面,那么 ui 路由器只会添加分配给他角色的视图。
这是我的配置代码示例
var app = angular.module('myApp', ['ui.router']);
app.config(function ($stateProvider, $urlRouterProvider){
$stateProvider
.state('home', {
url: '/home',
templateUrl: '/home.html',
controller: 'homeController'
})
.state('settings', {
url: '/settings',
data: {
roles: ['admin', 'moderator', 'user']
},
views:{
'':{
templateUrl:'/settings.html',
},
'piView@settings':{
data: {
roles: ['user']
},
templateUrl:'/personalInformation.html'
},
'permissionsView@settings':{//load this view if user is administrator
//I need some condition for this
data: {
roles: ['admin']
},
templateUrl: '/permissionsView.html'
}
},
controller: 'settingsController'
});
$urlRouterProvider.otherwise( function($injector) {
var $state = $injector.get("$state");
$state.go('/home');
});
});
将为每个用户(管理员或匿名用户)注入视图。但是我们可以管理哪个视图。最好的方法是使用 templateProvider
。
基于此问答:
Confusing $locationChangeSuccess and $stateChangeStart
我使用了上面来源的 plunker and adjusted it a bit
所以,让我们有这两个目标 (在 index.html 内)
<div ui-view="onlyForAdmin"></div>
<div ui-view=""></div>
还有一个状态 public,Admin 甚至会显示 onlyForAdmin 的内容,设置如下:
.state('public', {
url: "/public",
data: { isPublic: true },
views: {
'@' : {
templateUrl: 'tpl.html',
data: { isPublic: true },
},
'onlyForAdmin@' : {
templateProvider: ['$templateRequest','userService',
function($templateRequest,userService)
{
if(userService.isAdmin())
{
return $templateRequest("justForAdmin.html");
}
return ""; // other than admin will see nothing
}
]
}
}
})
justForAdmin.html(例如<h2>just for admin</h2>
)的内容将仅被注入一些授权服务会发现用户为管理员...
检查一下here
是否可以在 ui 路由器中创建带条件的嵌套视图? 条件分配给用户角色。
例如我有两种类型的用户:admin 和 user。 如果用户正在打开设置页面,那么 ui 路由器只会添加分配给他角色的视图。
这是我的配置代码示例
var app = angular.module('myApp', ['ui.router']);
app.config(function ($stateProvider, $urlRouterProvider){
$stateProvider
.state('home', {
url: '/home',
templateUrl: '/home.html',
controller: 'homeController'
})
.state('settings', {
url: '/settings',
data: {
roles: ['admin', 'moderator', 'user']
},
views:{
'':{
templateUrl:'/settings.html',
},
'piView@settings':{
data: {
roles: ['user']
},
templateUrl:'/personalInformation.html'
},
'permissionsView@settings':{//load this view if user is administrator
//I need some condition for this
data: {
roles: ['admin']
},
templateUrl: '/permissionsView.html'
}
},
controller: 'settingsController'
});
$urlRouterProvider.otherwise( function($injector) {
var $state = $injector.get("$state");
$state.go('/home');
});
});
将为每个用户(管理员或匿名用户)注入视图。但是我们可以管理哪个视图。最好的方法是使用 templateProvider
。
基于此问答:
Confusing $locationChangeSuccess and $stateChangeStart
我使用了上面来源的 plunker and adjusted it a bit
所以,让我们有这两个目标 (在 index.html 内)
<div ui-view="onlyForAdmin"></div>
<div ui-view=""></div>
还有一个状态 public,Admin 甚至会显示 onlyForAdmin 的内容,设置如下:
.state('public', {
url: "/public",
data: { isPublic: true },
views: {
'@' : {
templateUrl: 'tpl.html',
data: { isPublic: true },
},
'onlyForAdmin@' : {
templateProvider: ['$templateRequest','userService',
function($templateRequest,userService)
{
if(userService.isAdmin())
{
return $templateRequest("justForAdmin.html");
}
return ""; // other than admin will see nothing
}
]
}
}
})
justForAdmin.html(例如<h2>just for admin</h2>
)的内容将仅被注入一些授权服务会发现用户为管理员...
检查一下here