angular ui-router - вложенный контроллер - родительский контроллер инициируется дважды, если дочерний контроллер находится в одном и том же состоянии

.state('home', {
    url: '/home',
    views: {
        'main': {
            templateUrl: './main.html',
            controller: 'mainController'
        },
        'parent@home': {
            templateUrl: './parent.html',
            controller: 'parentController'
        },
        'child@home':{
            templateUrl: './child.html',
            controller: 'childController'
        },
        'otherPage@home': {
            templateUrl: './other-page.html',
            controller: 'otherController'
        }
    }
})

В parent.html у меня есть дочерний вид. В основном родительский контроллер (parentController) инициируется дважды в этой настройке. Если я удаляю состояние child@home, parentController инициируется только один раз. Что я делаю неправильно, есть ли лучший способ определить эти состояния?

index.html

<div class="maincontent" ui-view="main"></div>

main.html

<div class="maincontent container-fluid" ui-view="parent"></div>
<div class="maincontent container-fluid" ui-view="otherPage"></div>

родитель.html

<div ui-view="child"></div>

person ua_boaz    schedule 01.08.2016    source источник
comment
вы не определяете никаких состояний!   -  person Rathma    schedule 01.08.2016
comment
Может быть, вы можете показать свою разметку шаблона? Это дало бы кому-то лучшее представление/понимание вашей проблемы   -  person Oladapo Omonayajo    schedule 01.08.2016
comment
ragingprodigy, я добавил разметку шаблона, дайте мне знать, если вам нужно что-то еще   -  person ua_boaz    schedule 01.08.2016


Ответы (1)


Переопределите состояние следующим образом:

.state('home', {
    url: '/home',
    views: {
        '': {
            templateUrl: './main.html',
            controller: 'mainController'
        },
        'parent@home': {
            templateUrl: './parent.html',
            controller: 'parentController'
        },
        'child@home':{
            templateUrl: './child.html',
            controller: 'childController'
        },
        'otherPage@home': {
            templateUrl: './other-page.html',
            controller: 'otherController'
        }
    }
})

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

Сделав таким образом, ваш шаблон main.html будет содержать указатели на другие ui-views, как вы сделали с parent и otherPage.

Я не смог протестировать это, потому что я не на своем ПК для разработчиков, но я думаю, что это должно работать, потому что этот формат используется в паре моих проектов AngularJS.

person Oladapo Omonayajo    schedule 01.08.2016
comment
вы предлагаете удалить имя состояния для основного и сделать его ''? это не помогает, на самом деле, с чего я начал. - person ua_boaz; 01.08.2016
comment
Посмотрите этот планкр: plnkr.co/edit/yRgAlf6sGjB9fIjmnTg9?p=preview - person Oladapo Omonayajo; 01.08.2016