javascript – ui路由器嵌套视图条件
作者:互联网
是否可以在具有条件的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.
基于此Q& A:
Confusing $locationChangeSuccess and $stateChangeStart
我使用上面的源头and adjusted it a bit的plunker
那么,让我们有这两个目标(在index.html内)
<div ui-view="onlyForAdmin"></div>
<div ui-view=""></div>
还有一个州公众,管理员将通过以下设置显示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>仅适用于admin< / h2>)只会注入一些授权服务,会将用户视为管理员…
检查它here
标签:javascript,angularjs,angular-ui-router,state 来源: https://codeday.me/bug/20191003/1847455.html