Перезагрузка родительского состояния AngularJS UI-Router

0

Я пытаюсь создать какое-то приложение для входящих сообщений с списком сообщений слева и деталью выбранного сообщения справа, используя UI-Router для этого.

У меня есть родительское состояние, которое разрешает список сообщений из базы данных и дочернее состояние, которое разрешает выбранное сообщение из базы данных (id в параметре).

Проблема заключается в следующем: при навигации между сообщениями (дочернее состояние, juste изменение параметра id) родительское состояние также перезагружается (просмотр, контроллер... и список сообщений). Я не хочу этого, и я не понимаю, почему это происходит.

Навигация - первое решение попыталось (перезагрузка родителя)

<a ui-sref="app.messengers.show({id: row.id})"></a>

Навигация - второе решение было выполнено (перезагрузка родителя)

// Solution 2.1
$state.go('app.messengers.show', {id: id});
// Solution 2.2
$state.transitionTo('app.messengers.show', {id: id});

Попробовал также добавить параметр "reload: false" в обоих решениях (ui-sref-opts для первого решения, третий параметр для второго): родитель перезагружен.

UI-маршрутизатор

        .state('app.messengers', { // parent state
            abstract: true,            
            url: '/messenger',
            templateUrl: 'app/messengers/list.html',
            controller: 'MessengersController',
            resolve: {
                load: ['$ocLazyLoad', function ($ocLazyLoad) {
                    return $ocLazyLoad.load([
                        'app/messengers/messengerService.js',
                        'app/messengers/messengersController.js'
                    ]);
                }],
                messages: ['load', 'MessengerService', function (load, MessengerService) {
                    return MessengerService.list();
                }]
            }
        })
        .state('app.messengers.show', { // child state
            url: '/:id',
            templateUrl: 'app/messengers/detail.html',
            controller: 'MessengerDetailController',
            params: {
                id: null
            },
            resolve: {
                load1: ['$ocLazyLoad', function ($ocLazyLoad) {
                    return $ocLazyLoad.load([
                        'app/messengers/messengerDetailController.js'
                    ]);
                }],
                message: ['load', '$stateParams', 'MessengerService', function (load, $stateParams, MessengerService) {
                    var regexp = new RegExp('^\\d+$');
                    return (regexp.test($stateParams.id)) ? MessengerService.get($stateParams.id) : null;
                }]
            }
        })
Теги:
angular-ui-router
reload
parent-child

2 ответа

0
Лучший ответ

О мой Бог...

Я забыл, что делал некоторые проверки в $ stateChangeStart (цель аутентификации)... и если все в порядке:

$state.go(next.name, params, {reload: true});

Я изменил параметр перезагрузки на next.name. Оно работает.

Извините за эту мисс...

0

Попробуй это:

$state.go('^. show', {id: id});

Значение ^ означает родительское состояние.

  • 0
    Только что попробовал, без изменений для меня.

Ещё вопросы

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