Состояния Angular UI Router

0

У меня два состояния. Одно состояние - это таблица с доменами, а второе состояние - информация о домене. В таблице есть фильтры (выпадающие списки, выпадающие флажки), которые могут применяться к данным таблицы. Вы можете щелкнуть в домене из таблицы, которая запускает второе состояние (state1.domain).

Мой вопрос заключается в том, когда я нажимаю кнопку state1 в state1.domain, а затем нажимаю back to state1, как я могу сохранить отфильтрованные данные, а не повторно инициализировать контроллер? В настоящее время, когда я перехожу к состоянию1, мои фильтры были очищены, а также данные таблицы.

$stateProvider
.state ('state1', {
    url: '/state1',
    views: {
        "main@": {
            controller: 'StateOneCtrl',
            templateUrl: 'folder/state1.tpl.html'
        }
    },
    ncyBreadcrumb: { label: 'State One' },
    data: { pageTitle: 'State One', showTitle: false}
})
.state('state1.domain', {
    url: '/:domain',
    views: {
        "main@": {
            controller: 'StateOneDomainCtrl',
            templateUrl: 'folder/state1-domain.tpl.html'
        }
    },
    ncyBreadcrumb: { label: '{{domain}}' },
    data: { pageTitle: 'State One Domain', showTitle: false }
})
  • 0
    Его немного подобно тому, как это один stackoverflow.com/questions/31542972/... только вы используете data опции состояния , и я использую params
  • 0
    Извините, я забыл упомянуть, что использую хлебные крошки, чтобы вернуться назад.
Показать ещё 5 комментариев
Теги:
angular-ui-router

1 ответ

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

Использование сервисов

Вы можете сохранить эти значения в службе. При инициализации вашего контроллера вы просто настроите контроллеры var с сохраненным var в службе.

Может быть лучшим решением.

Использование хранилища сеансов

На мой взгляд, один из способов - использовать хранилище сеансов для хранения фильтров в потоке навигации в ваше приложение.

В контроллере вы запустите фильтры vars следующим образом:

$scope.filterName = sessionStorage.filterName

При каждом изменении фильтра вы сохраняете значение sessionStorage

//In your HTML on the filter
ng-change="onFilterNameChange()"

//In your JS
$scope.onFilterNameChange = function(){
    sessionStorage.filterName = $scope.filterName
}

И это почти все.

Если вы хотите "очистить" фильтры, вы также можете сделать это, вы можете управлять необязательным параметром url (например, resetFilters = true), который очищает фильтры.

Использование параметров запроса

Вы также можете (если не так много фильтров) явно задает фильтры в URL-адресе, как это

.state ('state1', {
    url: '/state1?filter1&filter2&filter3',
    views: {
        "main@": {
            controller: 'StateOneCtrl',
            templateUrl: 'folder/state1.tpl.html'
        }
    },
    ncyBreadcrumb: { label: 'State One' },
    data: { pageTitle: 'State One', showTitle: false}
})

Но вы можете застрять, поскольку вы не можете указать объект URL (тогда как вы можете подстроить его для своего сеанса.

Надеюсь, это помогло.

  • 0
    Что делать, если есть 10 параметров фильтра? это будет хорошее решение, чтобы передать его через URL?
  • 0
    @PankajParkar Зависит от вкусов. Я бы предпочел не указывать 10 фильтров в своем URL (тогда как Google в значительной степени предоставляет всю информацию в URL). Если бы у меня было столько фильтров, я бы выбрал решение sessionStorage.
Показать ещё 8 комментариев

Ещё вопросы

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