Некоторое время я обсуждал это, но у меня был Plunk, который воспроизводил его.
У меня есть состояние " Контакт ", которое загружается по умолчанию. с $state.transitionTo
Внутри этого состояния у меня есть некоторые взгляды, все они загружаются и все работает.
Если я нажму, чтобы изменить состояние на "Домой" по умолчанию или "ui-sref", а в состоянии "Home"/template у меня есть ui-sref="contacts
". Когда мы нажимаем "назад", чтобы установить состояние в контакты, оно должно работать, но теперь все подчиненные представления не вызываются должным образом.
Похоже, что когда ui-sref вызывает состояние, это ведет себя по-другому, когда оно загружается по умолчанию.
Почему $ state.transitionTo(''); похоже, работает иначе, чем ui-sref.
<script>
var myapp = angular.module('myapp', ["ui.router"])
myapp.config(function($stateProvider, $urlRouterProvider){
// For any unmatched url, send to /
$urlRouterProvider.otherwise("/")
$stateProvider
.state('home', {
templateUrl: 'home.html',
controller: function($scope){
}
})
.state('contacts', {
templateUrl: 'contacts.html',
controller: function($scope){
}
})
.state('contacts.list', {
views:{
"":{
template: '<h1>Contact.List Working wi no Data defined.</h1>'
},
"stateSubView":{
template: '<h2>StateSubView Working</h2>'
},
"absolute@":{
template: '<h2>Absolute item</h2>'
}
}
});
});
myapp.controller('MainCtrl', function ($state) {
$state.transitionTo('contacts.list');
})
Q2: Почему тег Absolute, который работает под контактом, когда я добавляю представление в индекс, но не работает, когда он находится в файле contact.html. Абсолютная справочная работа работает только с индексом, а не при вызове везде?
"absolute@":{
template: '<h2>Absolute item</h2>'
}
Пустой ui-view
работает как wild card и может использоваться для переключения по нескольким маршрутам, даже если у нас есть вложенный элемент. Но если у нас есть вложенный вид contact.list это может быть только доступ, если мы помещаем весь путь в ui-sref="contacts.list"
, потому что list
ребенок contact
не может быть доступа только с помощью ui-sref="contacts"
Я видел, что в index.html
вас есть пустой тег ui-view
. Что вы ожидаете туда? Думаю, вы не сможете этого сделать. Маршрутизатор просто не знает, с каким состоянием (дом или контакты) он должен заменить. По-видимому, он выбирает второй (контакты). Я бы предложил поместить url: '/'
в исходное состояние, и вы увидите разницу.
Это, безусловно, одна проблема.
Кроме этого: вы не можете просто просматривать представления из контактов.list в контактах afaik.