DarthJS
@DarthJS

Как правиль строить сложные Url, хранить и передавать их состояние?

Всем привет!

Делаю апликушку и есть необходимость строить ссылки типа /stateA/IdA/stateB/IdB с чем собственно и проблема возникла

Что я делаю:
* в темплейтах директивы с локальными скоупами, в контроллерах конфиги со стейтами

.state(stateZero, {
    url: '/list',
    template: < table config="config"> < /table>,
    controller: function () {}
})

.state(stateA.listA, {
    url: '/list/:id',
    template: < table id = 'id' config="config"> < /table>,
    controller: function () {}
})

.state(stateB.listB, {
    abstract: true,
    url: '/list/:prevID/listB/:id',
    template: < tabs id = "id" prevID = "prevID" config="config"> < /tabs>,
    controller: function () {}
})

.state(stateB.listB.tabA, {
    abstract: true,
    url: '/tabA',
    template: < input id = "id" prevID = "prevID" config="config"> < /input>,
    controller: function () {}
})


Что получается, у меня кнопка имеет такой вид
<button ui-sref="{{state.sref}}({id:id, prevID: prevID})"

В конфигах находятся данные о стейтах для кнопочки. Выходит, что я тяну два айдишника по контроллерам стейтов, отлавливаю их вставляю в кнопочку. Часто возникает проблема, когда необходимо по тому же пути возвращаться обратно - теряю айдишники.
Так же пробовал передавать данные в params: {id: '', prevID: '', test: 'test'} и ловить в $state.get() по как-то получается, что в стейтах B я вижу пустрые свойства, за исключением тест, который прописан ручками.

Пробовал вытягивать урл из $location резать его и забирать id, но посчитал это извращением и перестал так делать.

У кого есть опыт построения сложных урлов, подскажите как правильно делать, если есть ссылки на примеры было бы вообще здорово, так как обшуршал весь нэт и обычно простые примеры.
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 1
0X12eb
@0X12eb
Набросал примерный вариант реализации: Plnkr
Для отслеживания смены состояний и вытаскивания параметров из состояний потомков, можно использовать такой вариант:
controller: function($state, $scope, $rootScope) {
        $rootScope.$on("$stateChangeStart", function() {
          $scope.stateParams = $state.params;
        });
      }
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы