У меня два состояния. Одно состояние - это таблица с доменами, а второе состояние - информация о домене. В таблице есть фильтры (выпадающие списки, выпадающие флажки), которые могут применяться к данным таблицы. Вы можете щелкнуть в домене из таблицы, которая запускает второе состояние (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 }
})
Вы можете сохранить эти значения в службе. При инициализации вашего контроллера вы просто настроите контроллеры 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 (тогда как вы можете подстроить его для своего сеанса.
Надеюсь, это помогло.
data
опции состояния , и я используюparams