AngularJS reloadOnSearch не работает

После выполнения поиска и перехода я хочу, чтобы пользователь мог вернуться на страницу поиска (путем повторного нажатия в браузере) и сохранить текущие параметры поиска. Я понял, что для этого URL-адрес страницы должен быть обновлен, чтобы содержать данные о странице. Проведя исследование, я обнаружил, что могу обновить местоположение с помощью $location и заставить страницу НЕ перезагружаться при внесении изменений с помощью reloadOnSearch в маршрутах. Однако по какой-то причине, когда я меняю параметры поиска (url?...), страница действительно перезагружается. Любая идея, как исправить это, чтобы предотвратить перезагрузку?

routes.coffee:

'use strict'

angular.module('app.rc.routes', ['ui.router'])
  .config ['$stateProvider', '$urlRouterProvider', ($stateProvider, $urlRouterProvider) ->
    $urlRouterProvider.otherwise '/'
    $stateProvider
      ...
      .state('resource_center.search',
        url: '/resources/search?term'
        templateUrl: 'views/rc/search.html'
        controller: 'SearchCtrl'
        reloadOnSearch: false
      )
      ...
  ]

search.coffee:

'use strict'
angular.module('app.rc.controllers').controller 'SearchCtrl', ['$scope', '$state', '$http', '$stateParams', '$location', ($scope, $state, $http, $stateParams, $location) ->
  $scope.term = $stateParams.term || ''
  $scope.updateResults =  ->
    console.log "Loading Results"
    ...
    $location.search({term: $scope.term})

Ссылки:

В качестве ссылки на то, как правильно это сделать, я использовал: https://stackoverflow.com/a/12481175/1382588


person Michael Lynch    schedule 28.10.2013    source источник


Ответы (1)


reloadOnSearch в настоящее время не поддерживается ui-router

https://github.com/angular-ui/ui-router/issues/367

Вы должны иметь возможность делать то, что хотите, в ui-router, имея два состояния: состояние страницы поиска и дочернее состояние результатов поиска.

например, поиск будет в /search, а результаты поиска в /search/{query}. Страница поиска будет иметь представление для отображения окна поиска и вложенное представление для отображения результатов поиска. Кнопка поиска изменит состояние на состояние результатов поиска. Это приведет к обновлению вложенного представления результатов поиска без изменения внешнего вида страницы поиска.

person Dan    schedule 28.10.2013
comment
Это по-прежнему приведет к перезагрузке страницы, в результате чего все переменные, установленные в настоящее время в $scope, будут сброшены (если только они не будут переданы через {query}). Кажется довольно неэффективным обрабатывать изменение страницы, а затем анализировать все $stateParams. Я полагаю, что это рабочее решение, но я надеюсь, что есть более эффективный способ сделать это. - person Michael Lynch; 28.10.2013
comment
Я не уверен на 100%, но я думаю, что маршрутизатор достаточно умен, чтобы перезагружать только необходимые части - см. angular-ui.github.io/ui-router/sample/#/contacts/1/item/a. Если вы просто переключаете вложенное представление, страница не должна перезагружаться. Я бы предположил, что вы все равно захотите справиться с этой ситуацией, чтобы ваши пользователи могли обмениваться URL-адресами страниц результатов поиска друг с другом. - person Dan; 28.10.2013