Страницы

Поиск по вопросам

воскресенье, 8 марта 2020 г.

Angular UI-router Неопределенное состояние

#angularjs #angular_ui_router


Пункты меню выглядят как 

Label


Меню формируется автоматически, состояния подставляются из массива.
Как сделать так, чтобы для некоторых (не всех) пунктов меню состояние было фиктивным,
т.е. при клике на ссылку переход не происходил бы. Например, просто открывалось бы
подменю, а страница сайта не менялась.
Варианты: void(0), не существующее состояние, состояние со свойством abstract:true,
- вызывают ошибку.
Сделать обратный переход в resolve не получается, т.к. исходное состояние уже потеряно.
(или нет?) 

Уточнение к комментарию Grundy:
Предложение сделать так:

Label  
Label 


Приводит к удвоению кода. Label в моем случае содержит код, который придется повторить
дважды. Не хотелось бы.
Также не хотелось бы отказываться от ui-sref. 
Можно было бы сделать так:

Label 


где

path=[path1, path2, void(0)]


Но хочется сделать на ui-sref. 

Видимо, надо еще пояснить.Вариант: 

Label 

можно, но не хочется.
Хочется что-то типа:

Label 


Но на это angular выдает ошибку, т.к. $staite не может быть void(0).
Вот я и хотел бы создать фиктивное состояние, которое никуда бы не переводило, аналогично
href="void(0)"
    


Ответы

Ответ 1



Ответ найден, благодаря @Grundy. Состояние с именем '.' и есть то самое искомое состояние. В итоге имеем: Label Плохо вчера посмотрел, данное решение является непригодным, т.к. angular все равно пытается перейти в данное состояние (с именем '.') и выдает ошибку, оставаясь, правда, в исходном состоянии. Но выход все же найден. Создаем рабочее состояние в минимальной комплектации. .state('layout.fix', { views: { }, resolve: { path: function(){console.log('Im chost'); return true; } } }) Такое состояние angular воспримет как корректное. По нему даже можно перейти. В блоке .run() вставить перехват смены состояния: $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams, options){ if(fromState.name != '' && toState.name == 'layout.fix'){ event.preventDefault(); } }); Таким образом, если это не изначальная загрузка fromState.name != '' и переход идет на фиктивное состояние, то отменяем переход.

Комментариев нет:

Отправить комментарий