Как реализовать acordion с отдельными роутами на angular + ui-router?

Есть страничка, на котрой есть список объектов, каждый из которых (только один одновременно) можно разворачивать, то есть более-менее стандартный акордеон. Хочется, чтобы, развернутое состояние было выражено в виде отдельного sub-route /list/:itemId и над списком был выведен id развернутого элемента. Список может быть немаленьким и внутренние блоки тоже весьма большие, поэтому в идеале, лучше бы не рендерить неактивные внутренние блоки в принципе.
Есть примерно такая структура: plunkr.

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

1. Передать iid из item.$scope наверх в list.$scope и в list.html сделать что-то типа:
<div ui-view ng-if="item === iid"></div>
Во-первых, не нашел, как это сделать, во-вторых есть подозрение, что это будет валить производительность.

1.1. Можно передавать не в list.$scope, а нагадить в $rootScope, но уж очень бы не хотелось.

2. Передать item в репитере из list.$scope в item.$scope, а в item.html обернуть всё в
<div ng-if="currentitem === iid"></div>

Предложите более правильный способ или пути завершения моих версий.
  • Вопрос задан
  • 2459 просмотров
Пригласить эксперта
Ответы на вопрос 1
@n0thing
Попробуй использовать stateProvider вместо ui-routing'а
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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