我的路由提供商中有以下代码:
project.config(['$routeProvider','$locationProvider',
function ($routeProvider,$locationProvider){
$routeProvider.
when('/start',{
templateUrl: 'start.html',
controller: 'startController'
}).
when('/event',{
templateUrl: 'event.html',
controller: 'eventController'
}).
when('/report',{
templateUrl: 'report.html',
controller: 'reportController'
}).
otherwise({
redirectTo: '/'
});
我有一个rootcope变量admin,其值为1或0
如果为路由提供程序提供了未知值,则我的当前代码会将用户发送到起始页。我希望路由提供商将用户重定向到事件页面(如果用户是管理员)或者开始页面,如果用户不是管理员,则给出未知值到路线提供者。
我认为这样的事情可能有用,但它没有。
otherwise({
redirectTo: defaultRedirect
});
$rootScope.admin == 1 ? $rootScope.defaultRedirect = "/event" : $rootScope.defaultRedirect = "/start"
它给我一个错误。 感谢帮助。感谢。
答案 0 :(得分:0)
不,它不会那样工作。相反,你可以做的是在其他块中解决,你可以检查登录用户是否是管理员(通过检查$ rootScope变量或调用身份验证服务)。如果服务解析用户是管理员,那么您可以使用$ location服务来使用$location.path("/event")
或$location.path("/start")
更改路线。代码如下:
$routeProvider.otherwise({
resolve: {
load: [
'$rootScope', '$q', 'authentication', '$location', function ($rootScope, $q, authentication, $location) {
var defer = $q.defer();
function chooseRoute() {
if (authentication.identity === undefined) {
$location.path('/logon');
} else {
$location.path('/somewhere');
}
defer.reject();
}
if (authentication.identityResolved)
chooseRoute();
else {
var unbind = $rootScope.$watch(function () {
return authentication.identityResolved;
}, function (resolved) {
if (!resolved)
return;
chooseRoute();
unbind();
});
}
return defer.promise;
}
]
}
});
另一种方法是,您可以在config / run block&中检查事件$routeChangeStart
。然后相应地检查用户是否是管理员,您可以使用$ location服务将用户重定向到特定路线。