Приложение состоит из нескольких вкладок, котрые добавляются при запуске или в процессе работы.
Пользователь должен иметь возможность в любой момент переключаться между вкладками и возвращаться обратно.
Вкладки содержат кучу вьюх со сложноидентифицируемым состоянием. Например, форма для заполнения, или таблица результатов запроса с выделениями.
Насколько я понимаю, ui-router, sticky states, deep state redirect с таким не справятся, и хранить состояние нужно прямо в DOM и связанными с ним контролерами. А сами вкладки делать в духе ui-bootstrap, через директивы tabset/tab или руками через ng-show.
Вопрос - как в этом случае создавать вкладки с вложенными вьюхами?
И как создавать их из вложенных внутрь вкладок контроллеров?
Upd. Вообще, если я сделаю что-то типа
<tabset>
<tab ng-repeat="tab in ctrl.tabs"><ng-include src="tab.src"></tab>
</tabset>
При добавлении/удалении вкладок из контроллера (this.tabs) при каких условиях не будут перерендеряться все вообще вкладки?
Upd2. Чтобы создавать вкладки можно было отовсюду, очевидно, нужен сервис, с реестром вкладок и всё такое. Но стобы присобачить это к вьюхе из предыдущего Upd, нужен контроллер, который получается довольно странным:
.service('TabService', function() {
this.tabs = []; /* все вкладки приложения */
this.openTab = function() { ... };
this.closeTab = function() { ... };
})
.controller('TabsCtrl', function TabCtrl(TabService) {
this.tabs = TabService.tabs; /* чтобы сделать ng-repeat */
this.openTab = TabService.openTab; /* чтобы сделать где-нибудь ng-click="ctrl.openTab()" */
})
Upd3. При создании вкладки нужно передавать паарметры контрллеру которы будет ею рулить.
Если создавать методом
<tab ng-repeat="tab in ctrl.tabs"><ng-include src="tab.src"></tab>
И tab.src указывать на кусок html в котором приаттачен контроллер - как он может достучаться до внешнего scope? И где вообще в таком раскладе сделать такой scope?