Mr_Franke
@Mr_Franke
Front-end developer

Как сделать отдельный контроллер для вложенной страницы ui-router?

Добрый день!
Нужно сделать так, что бы для url /sites и /sites/add работали разные контроллеры. Роутинг выглядит так:
$stateProvider
    .state('sites', {
        url: '/pub/sites',
        templateUrl: tmpsPath+'/sites/view/template.html?v='+VERSION,
        controller: 'Pages.sites'
    })
    .state('sites.add', {
        url: '/add',
        templateUrl: tmpsPath+'/add/template.html?v='+VERSION,
        controller: 'Pages.sites.add'
    });


Но для обоих url отрабатывает один и тот же контроллер Pages.sites. В чем проблема и как ее можно исправить?

Или я не правильно понял смысл вложенного роутинга и в моем случае нужно писать так?
$stateProvider
    .state('sites', {
        url: '/pub/sites',
        templateUrl: tmpsPath+'/sites/view/template.html?v='+VERSION,
        controller: 'Pages.sites'
    })
    .state('sites_add', {
        url: '/pub/sites/add',
        templateUrl: tmpsPath+'/add/template.html?v='+VERSION,
        controller: 'Pages.sites.add'
    });
  • Вопрос задан
  • 3022 просмотра
Пригласить эксперта
Ответы на вопрос 1
AMar4enko
@AMar4enko
Крутые у вас теги, нечего сказать.
Это одна из ловушек, в которую я попал, начав использовать ui-router, от которого впоследствии отказался (может быть в дальнейшем переосмыслю, но пока так). Вот выдержка из вики:
When the application is in a particular state—when a state is "active"—all of its ancestor states are implicitly active as well. Below, when the "contacts.list" state is active, the "contacts" state is implicitly active as well, because it's the parent state to "contacts.list".

Т.е. при активном стейте третьего, например, уровня, у вас будут активны все родительские стейты и инстанцируются их контроллеры.
Тут вот простой пример:
plnkr.co/edit/7FD5Wf?p=preview
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы