我想根据用户权限更改路由器提供商上的templateUrl,如下所示:
field acno value date
a 11 12 17-11-2015
b 11 3 17-11-2015
c 11 234 17-11-2015
d 11 2321 17-11-2015
d 11 12 01-09-2016
d 11 32 28-04-2016
a 11 23 17-11-2015
a 11 324 01-09-2016
d 11 43 17-11-2015
Output - I'm looking for
field acno value date
a 11 324 01-09-2016
b 11 3 17-11-2015
c 11 234 17-11-2015
d 11 12 01-09-2016
我有一个查询返回给我用户的权限,然后如果用户是管理员我应该将他重定向到admin-homepage? 这样做的最佳做法是什么?
答案 0 :(得分:1)
templateUrl
接受函数作为动态路由值的值。
来自文档:
“如果templateUrl是一个函数,它将使用以下参数调用:
{Array。} - 通过应用当前路线从当前$ location.path()中提取的路线参数“
您可以使用此函数来运行if语句逻辑,像中间件一样运行,或者应用执行逻辑的函数,构造动态模板并将其返回。
$routeProvider
.when('/', {
templateUrl: _ => { //you're not using a dynamic file name here
let route = 'app/views/pages/';
if (user) route += 'home-page.html';
else if (admin) route += 'admin-page.html';
return route;
}
})
您可以更进一步,实际应用参数,这将为您的网址添加依赖项。现在,中间件将在此处更改,因为它们都接受相同的值,因此您必须更改该功能以检查两个层上的权限,或应用不同的URL范围。
$http
的示例。显然,我不了解您的整个架构,将.isUser
,isAdmin
和url/for/permissions
作为您需要更改的内容。
$http.get('/url/for/permissions/').then(results => {
$routeProvider
.when('/', {
templateUrl: _ => { //you're not using a dynamic file name here
let route = 'app/views/pages/';
if (results.isUser) route += 'home-page.html';
else if (results.isAdmin) route += 'admin-page.html';
return route;
}
})
});
答案 1 :(得分:1)
您可以使用routeChange
事件来实现此目的(您可以将此代码添加到app.run
):
在 app.run
:
$rootScope.$on("$routeChangeStart", function(event, next, current) {
if(next.$$route.originalPath = '/' && user) {
$location.path('/home');
}
});