Как обрабатывать недопустимые параметры URL с помощью ui-router в AngularJS?

#angularjs #url-routing #state #angular-ui-router

#angularjs #url-маршрутизация #состояние #angular-ui-router

Вопрос:

Я перехожу из состояния A в состояние planManager/:param, где param может быть только param1, param2 или param3. Я использую этот код для навигации:

 <a href ui-sref=".({state: 'param1'})" ng-click="updateResize()" ui-sref-opts="{reloadOnSearch: false}">GO TO Param1 State</a>
 

Теперь, если каким-то образом пользователь попадает на URL

parentState/planManager/InvalidParam

, я хочу перенаправить на

parentState/planManager/param1

В моем модуле planManager я делаю это с помощью:

 angular.module( 'parentState.planManager', [
  'ui.router'
])
.config(function config( $stateProvider, $urlRouterProvider) {
  $stateProvider["state"]( 'planManager', {
    url: '/planManager/:state',
    views: {
      "main": {
        controller: 'planManagerControl',
        templateUrl: 'planManager/planManager.tpl.html'
      }
    },
    data:{ pageTitle: 'Plan Manager', currentState: 'planManager'},
    resolve:{
         validState: ['$stateParams','localStorageService','$urlRouter',function($stateParams,localStorageService,$urlRouter){
          if($stateParams["state"]!="buy" amp;amp; $stateParams["state"]!="audience" amp;amp; $stateParams["state"]!="campaign"){
            $stateParams["state"]="buy";
          }

          return true;
         }]
        }
  });
  $urlRouterProvider.when('/planManager/', '/planManager/buy');
  $urlRouterProvider.when('/planManager', '/planManager/buy');
  $urlRouterProvider.otherwise('/planManager/buy');
})
 

Похоже, это не работает. Что здесь не так? Должен ли я использовать какое-то регулярное выражение?

Комментарии:

1. Ты до этого додумался?

2. Добавлен $urlRouter.sync(); после $stateParams[«state»]=»buy»;