angularjs中的路由 - 条件路由,否则为语法

时间:2018-06-01 15:27:57

标签: angularjs routing routes angular-ui-router

我的路由提供商中有以下代码:

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"

它给我一个错误。 感谢帮助。感谢。

1 个答案:

答案 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服务将用户重定向到特定路线。