Я установил родительское представление с несколькими дочерними представлениями и, похоже, работает без проблем в приложении. Проблема в том, что вы обновляете страницу или пытаетесь перейти непосредственно к дочернему виду с соответствующим URL-адресом.
Вот мои состояния, что я загружаю. Это родительское состояние:
{name: "myTeam", url: "/myTeam", template: "<my-team></my-team>"}
Здесь один из детей:
{name: "myTeam.info", url: "/info", template: "<my-team.info></my-team.info>"}
Здесь другое:
{name: "myTeam.checkin", url: "/checkin/{book}/{club}/{team}/{bus}", template: "<my-team.checkin></my-team.checkin>"}
Итак, если я нахожусь в представлении "Информация", он правильно загружает шаблон и устанавливает URL-адрес "/myTeam/info". Если вы попытаетесь обновить страницу или просто начать с URL-адреса "/myTeam/info", он не загрузит состояние/шаблон.
Я добавил код в angular-ui-router.js (версия 0.1.2), чтобы попытаться отладить. Я добавил строку console.log() в строке 912.
UrlMatcher.prototype.exec = function (path, searchParams) {
var m = this.regexp.exec(path);
console.log(" --> " + this.regexp + " -- " + path + " = " + m);
if (!m) return null;
searchParams = searchParams || {};
Здесь вывод:
--> /^\/myTeam\/?$/ -- /myTeam/info = null
--> /^\/info(.*)?\/?$/ -- /myTeam/info = null
--> /^\/checkin\/([^\/]*)?\/([^\/]*)?\/([^\/]*)?\/([^\/]*)?(.*)?\/?$/ -- /myTeam/info = null
Таким образом, он не соответствует родительскому или дочернему.
Я следовал примеру вложенных состояний и вложенных представлений. Их URL-адреса выглядели одинаково для меня.
Я не вижу, как это имеет значение, но я использую дополнительные компоненты для загрузки этих данных в качестве состояний будущего и использования ocLazyLoad.
Любые мысли о том, как я могу заставить URL работать? Или, как он должен работать?
странный, мой проект имеет дочерние состояния, а у некоторых детей больше детей, и он отлично работает без проблем, я покажу вам, как настроить мой URL:
dashboardState.js
состояние с url: ''
является домашней страницей, и оно загружается, когда вы переходите к url /home, но их дети загружаются дома на приборной панели.
(function () {
'use strict';
angular
.module('myapp')
.config(dashboardStates);
function dashboardStates($stateProvider) {
var dashboard = {
name: 'dashboard',
abstract: true,
url: '/home', // view inicial abaixo
templateUrl: 'app/components/Dashboard/view/dashboard.html',
controller: 'DashboardController',
controllerAs: 'dashboard'
};
var dashboardHome = {
name: 'dashboard.home',
url: '',
parent: 'dashboard',
templateUrl: 'app/components/Dashboard/view/dashboard.home.html',
controller: 'DashboardController',
controllerAs: 'home',
ncyBreadcrumb: {
label: 'Home'
}
};
// states
$stateProvider
.state(dashboard)
.state(dashboardHome);
}
}());
и состояние под нагрузками внутри панели приборов:
profileState.js
(function () {
'use strict';
angular
.module('myapp')
.config(profileStates);
function profileStates($stateProvider) {
var profile = {
name: 'dashboard.profile',
url: '/profile',
templateUrl: 'app/components/Profile/view/profile.html',
controller: 'ProfileController',
controllerAs: 'profile'
};
var profileEdit = {
name: 'dashboard.profile.edit',
url: '/edit',
templateUrl: 'app/components/Profile/view/profile.edit.html',
controller: 'ProfileController',
controllerAs: 'profile'
};
$stateProvider
.state(profile)
.state(profileEdit);
}
}());
Дополнительная информация: https://github.com/angular-ui/ui-router/wiki/Nested-States-and-Nested-Views
Наконец, я решил, что проблема связана с дополнительными функциями интерфейса и будущей государственной загрузкой.
Я закончил с легкой дороги ради времени. Я изменил свой проект, чтобы не использовать дочерние состояния, и это заботится о моей проблеме.
Из лучших, что я могу сказать, это не загрузка всех состояний детей. Будущий загрузчик состояний только соответствует родительскому и загружает родителя.
Я думаю, что моя проблема аналогична этой проблеме, которую я нашел здесь: Дополнительные возможности маршрутизатора UI № 63
Я попытался написать код в моем следующем загрузчике состояний, который загрузил родительское состояние и все его дочерние элементы. Это заставило меня изменить модификацию интерфейса маршрутизатора, чтобы принять множество обещаний, и мне пришлось изменить слишком много вещей, чтобы заставить его работать.
Надеюсь, в какой-то момент я могу попытаться построить более полное исправление за пределами моего проекта и внести свой вклад, но на данный момент мое решение состоит в том, чтобы избежать дочерних состояний.