Маршрутизация URL на дочерний вид

0

Я установил родительское представление с несколькими дочерними представлениями и, похоже, работает без проблем в приложении. Проблема в том, что вы обновляете страницу или пытаетесь перейти непосредственно к дочернему виду с соответствующим 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 работать? Или, как он должен работать?

Теги:
angular-ui-router

2 ответа

0

странный, мой проект имеет дочерние состояния, а у некоторых детей больше детей, и он отлично работает без проблем, я покажу вам, как настроить мой 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

  • 0
    Любое из ваших штатов лениво загружено? Я пришел к выводу, что это моя проблема. Когда я вынул свою ленивую загрузку, она работала нормально. Я лениво загружаю состояния, так что я могу загружать только состояния, в которых текущий пользователь имеет безопасность. Запрос $ http проверяет безопасность и возвращает список состояний.
0

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

Я закончил с легкой дороги ради времени. Я изменил свой проект, чтобы не использовать дочерние состояния, и это заботится о моей проблеме.

Из лучших, что я могу сказать, это не загрузка всех состояний детей. Будущий загрузчик состояний только соответствует родительскому и загружает родителя.

Я думаю, что моя проблема аналогична этой проблеме, которую я нашел здесь: Дополнительные возможности маршрутизатора UI № 63

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню