Angular UI-Router: несколько URL-адресов для одного состояния

Я начал использовать angular ui-router, и я пытаюсь выяснить, как несколько URLS ссылаются на одно состояние. Например:

/orgs/12354/overview
//retyrns the same pages as
/org/overview

В настоящее время у моего поставщика $state есть что-то вроде этого, и его неясно, как проскальзывать в маршруте псевдонима /org/overview, так что он правильно наследует от родителя 'org'.

.state('org', {
  abstract: true,
  url: '/orgs/:orgID',
  templateUrl: '/client/navigation/main.html'
})
.state('org.overview', {
  url: '/overview',
  templateUrl: '/client/overview/overview.html',
  controller: 'OverviewCtrl'

})

Ответ 1

Это может быть достигнуто с помощью when(). Предположим, что это состояние, на которое вы хотите указать несколько URL-адресов.

.state('app.home',
  {
    url: '/home',
    templateUrl: 'home.html',
    controller: 'homeCtrl'
  })

В config() вы можете использовать when() следующим образом:

angular.module('myApp', [])
   .config($urlRouterProvider){
       $urlRouterProvider.when(/homepage, ['$state','$match', function ($state, $match) {
          $state.go('app.home');
 }]);
}

Аналогичным образом вы можете добавить несколько URL-адресов, указывающих на то же состояние.

Ответ 2

Я думаю, вам нужно только определить подтесты без URL-адреса, как показано ниже.

.state('org', {
  abstract: true,
  url: '/orgs/:orgID',
  templateUrl: '/client/navigation/main.html'
})
.state('org.1', {
  templateUrl: '/client/overview/one.html',
  controller: 'OverviewCtrl'
})
.state('org.2', {
  templateUrl: '/client/overview/two.html',
  controller: 'OverviewCtrl'
})
.state('org.3', {
  templateUrl: '/client/overview/three.html',
  controller: 'OverviewCtrl'
})

Ответ 3

Во-первых, абстрактное состояние не возвращает представление.

Кроме того, поскольку вы пытаетесь использовать множественное число orgs для представления списка и единственное org для представления элемента, вы не можете использовать добавленные маршруты, которые являются поведением по умолчанию.

.state('org', {
  url: '/orgs',
  templateUrl: '/client/navigation/main.html'
})
.state('org.overview', {
  url: '^/org/:orgID/overview'
  templateUrl: '/client/overview/overview.html',
  controller: 'OverviewCtrl'
})