Routing in angularjs - условная маршрутизация в ином синтаксисе - PullRequest
0 голосов
/ 01 июня 2018

У меня есть следующий код в моем провайдере маршрутов:

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: '/'
  });

У меня есть переменная rootscope admin со значением 1 или 0

Мой текущий код отправляет пользователя в началостраницу, если неизвестное значение задано поставщиком маршрута.Я хочу, чтобы поставщик маршрутов перенаправил пользователя на страницу event , если пользователь является администратором, или на страницу start , если пользователь не является администратором, когда неизвестному значению присвоено значениепоставщик маршрута.

Я думал, что-то подобное может сработать, но это не сработало.

otherwise({
redirectTo: defaultRedirect
});

$rootScope.admin == 1 ? $rootScope.defaultRedirect = "/event" : $rootScope.defaultRedirect = "/start"

Это выдает ошибку.Помощь приветствуется.Спасибо.

1 Ответ

0 голосов
/ 03 июня 2018

Нет, так работать не будет.Вместо этого вы можете иметь разрешение в другом блоке, где вы можете проверить, является ли пользователь, вошедший в систему, администратором (проверяя переменную $ 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;
            }
        ]
    }
});

Другой способ заключается в том, что вы можете проверить событие $routeChangeStart в блоке config / run, а затем, соответственно, проверяя, является ли пользователь администратором, вы можете перенаправить пользователя на определенные маршруты, используя службу $ location.

...