Почему дают "аннотация: настоящий" государственный URL-адрес?


Я сегодня возился с ui-маршрутизатором, пытаясь лучше понять леса в Ionic, и одна вещь, которую я заметил, заключалась в том, что они дают абстрактное состояние "вкладок" url.

единственный раз, когда я когда-либо использовал абстрактные состояния, я использовал пустую строку в качестве url-адреса, и я замечаю, что если я когда-либо случайно пытался перейти в абстрактное состояние (в отличие от дочернего состояния), я получаю ошибку:

не удается перейти к абстрактное состояние ' [insertAbstractStateHere]'

edit:

3 60

3 ответа:

причина, по которой вы будете использовать абстрактное состояние, - это сохранить ваше определение сухой когда у вас есть часть вашего url-адреса, недоступная для навигации. Например, предположим, что у вас была схема url-адреса, подобная следующей:

/home/index
/home/contact

однако, по какой-то причине в вашем дизайне этот url был недействительным (т. е. нет цели для страницы):

/home

теперь вы можете просто создать два состояния для этой ситуации, с полными URL-адресами, однако тогда вы будете писать /home/ в два раза, и описание немного более запутанное. Лучше всего вместо этого создать домашний абстрактный родитель, из которого два других состояния являются дочерними (для документов ui-router):

$stateProvider
    .state('parent', {
        url: '/home',
        abstract: true,
        template: '<ui-view/>'
    })
    .state('parent.index', {
        url: '/index',
        templateUrl: 'index.html'
    })
    .state('parent.contact', {
        url: '/contact',
        templateUrl: 'contact.html'
    })

просто обратите внимание, что внутри родительского состояния мы назначаем шаблон, единственным дочерним элементом которого является ui-view. Это гарантирует, что дети отображаются (и может быть, поэтому ваш появляется пустым).


иногда вы можете заметить использование абстрактного состояния с пустым url. Наилучшим образом использовать этот настройка-это когда вам нужен родительский resolve. Например, для подмножества состояний могут потребоваться определенные данные сервера. Поэтому вместо того, чтобы помещать одну и ту же функцию разрешения в каждое из ваших состояний, вы можете создать пустой Родительский url-адрес с требуемым разрешением. Это также может быть полезно, если вам нужны иерархические контроллеры, где родитель не использует представление (не уверен, почему вы этого хотите, но это правдоподобно).

.state('home', {
        url: '/home',
        abstract:true,                        
        controller: "HomeController",
        templateUrl:"path to your html"                       
})
.state('home.list', {
        url:"",
        controller: "HomelistController",
        templateUrl:"path to your html" 
})

используйте абстрактное состояние, также включите маршрутизатор пользовательского интерфейса для навигации без перезагрузки контроллера / страницы.