2016-03-01 2 views
2

В моем Aurelia webapp, у меня есть страница со ссылками. Они пойманы с помощью click.delegate="", который идет на метод в коде. Код представления затем будет использовать http-fetch для вызова AJAX, а затем обновит данные, просто обновив внутреннюю переменную, привязанную к некоторым элементам в шаблоне HTML. Работает отлично, за исключением одного - оно не отражается в строке адреса URL (в браузере - поэтому закладка невозможна).Установить URL-адрес без обновления всего шаблона в Aurelia

Одним из решений является создание маршрута с параметром. Это вызовет метод activated(), w. параметр. Я заметил, что конструктор не перепутал (при навигации по тому же маршруту, но с разными параметрами), поэтому я предполагаю, что тот же экземпляр ViewModel используется.

{ route: 'cell-detail/:id', name: 'cell-detail', moduleId: 'cell-detail',  title: 'cell-detail' }, 

Однако, я хочу знать (и предотвратить) весь шаблон в HTML от визуализируемого каждый раз, а не только часть измененной связанной переменной. Я уже использую activationStrategy.invokeLifecycle, так что, возможно, он уже работает таким образом. Я не знаю, как это выяснить.

Правильно ли это, и если да, есть ли способ обновить строку URL/location, не перерисовывая весь HTML-шаблон (возможно, новое место для отражения внутренних изменений без использования маршрутизатора)?

Update Наблюдая изменения DOM в вкладке элементов в Chrome Developer Tools, похоже Aurelia обновляет только то, что изменилось - как Реагировать теневую-РОМ. По крайней мере, есть большая видимая разница (HTML загорается/мигает в консоли dev) при использовании activationStrategy.replace.

Однако при использовании маршрутизатора существует небольшая разница, а просто обновляется внутренняя связанная переменная, поэтому, если кто-то точно знает, что такое happeing, это будет просветляющим.

ответ

2

Почему вы не просто использовать History's API pushState method

history.pushState({someState : someStateValue}, "new title", newUrl); 

Конечно, вам нужно обрабатывать восстановление надлежащего состояния себя, когда пользователь deeplinks к этой ссылке. Вы можете сделать это в базе метода активации на объекте params

activate(params){ 
    // params.relevantStateValue1 
    // params.relevantStateValue2 
    // etc 
} 
+0

Интересно, я посмотрю на это. Благодарю. – specimen

+1

Это, кажется, работает отлично! В документах я вижу, что в маршрутизаторе есть встроенная поддержка PushState. – specimen

Смежные вопросы