У меня есть SPA Angular, в котором представлены различные списки рекомендаций и карта местоположений Google, основанная на разных сокращениях некоторых данных ресторана (см. m.amsterdamfoodie.nl). Я хочу, чтобы каждый из этих списков имел свой собственный URL. Чтобы Google сканировал разные списки, я использую теги <a>
для навигации offcanvas.
В настоящее время тег <a>
вызывает обновление представления, что очень заметно с картой.
- Я могу предотвратить это с помощью
ng-click
и$event.preventDefault()
(см. ниже фрагменты кода), но затем мне нужно реализовать средство обновления URL-адреса браузера. - Но при попытке Angular
$state
или в браузереhistory.pushstate
я в конечном итоге запускаю изменения состояния и обновление представления...!
Поэтому мой вопрос: как я могу обновить модель и URL-адрес, но не обновляя представление? (См. также Angular/UI-Router - Как обновить URL без обновления всего?
Я экспериментировал с множеством подходов и в настоящее время имею этот html
<a href="criteria/price/1" class="btn btn-default" ng-click="main.action($event)">Budget</a>
В контроллере:
this.action = ($event) ->
$event.preventDefault()
params = $event.target.href.match(/criteria\/(.*)\/(.*)$/)
# seems to cause a view refresh
# history.pushState({}, "page 2", "criteria/"+params[1]+"/"+params[2]);
# seems to cause a view refresh
# $state.transitionTo 'criteria', {criteria:params[1], q:params[2]}, {inherit:false}
updateModel(...)
И, по-моему, происходит то, что я запускаю код $stateProvider
:
angular.module 'afmnewApp'
.config ($stateProvider) ->
$stateProvider
.state 'main',
url: '/'
templateUrl: 'app/main/main.html'
controller: 'MainCtrl'
controllerAs: 'main'
.state 'criteria',
url: '/criteria/:criteria/:q'
templateUrl: 'app/main/main.html'
controller: 'MainCtrl'
controllerAs: 'main'
Одна из возможных подсказок заключается в том, что с приведенным ниже кодом, если я загружу, например. http://afmnew.herokuapp.com/criteria/cuisine/italian, тогда представление обновляется при навигации, тогда как если я загружу http://afmnew.herokuapp.com/ нет обновлений, но вместо них нет обновлений URL. Я не понимаю, почему это происходит вообще.