AngularJS: Можно ли игнорировать URL-адрес состояния родителя при использовании UI-Router?

Я разрабатываю приложение AngularJs с использованием UI-Router(-extras), в котором я использую следующую настройку:

  .state('root', {
    url: '/{language:(?:nl|en)}',
    views: {
      'root': {
        templateUrl: 'app/root/root.html',
        controller: 'RootController'
      }
    }
  })
  .state('root.main', {
    views: {
      'main': {
        templateUrl: 'app/main/main.html',
        controller: 'MainController'
      }
    },
    sticky: true
  })
  .state('root.modal', {
    url: '/{locale:(?:nl|fr)}',
    views: {
      'modal': {
        templateUrl: 'app/modal/modal.html',
        controller: 'ModalController'
      }
    }
  })

Корневое состояние определяет язык в URL. Кроме того, у меня есть несколько модальных и основных состояний, которые имеют свои собственные URL (т.е. root.main.home => /en/home).

Теперь я хочу иметь модальные состояния, которые не имеют URL. Как я могу заставить государство игнорировать URL его родителя?

1 ответ

Отвечать:

как государство может игнорировать URL своего родителя?

у нас есть

Абсолютные маршруты (^)

Если вы хотите иметь абсолютное соответствие URL-адресов, вам необходимо добавить префикс вашей строки URL-адреса со специальным символом "^".

$stateProvider
  .state('contacts', {
     url: '/contacts',
     ...
  })
  .state('contacts.list', {
     url: '^/list',
     ...
  });

Таким образом, маршруты станут:

  • состояние контактов "/contacts"
  • совпадения состояния "contacts.list" "/list", URL не были объединены, потому что был использован ^.

Также проверьте это: как реализовать пользовательские маршруты в angular.js?

Другие вопросы по тегам