2015-05-21 3 views
2

Моя цель заключается вКак остановить перегрузки контроллера при использовании динамических маршрутов

  • остановки перегрузки контроллера при использовании динамических маршрутов. например: Если у меня есть маршрут, определяемый как «/ home /: param», и я перемещаюсь из «/ home/path1» в «/ home/path2», контроллер shoudnt получает перезагрузку.

Я попытался реализовать это, включив шаблоны, используя ng-include. Хотя он не перезагружает контроллер, URL-адрес маршрута остается неизменным. Есть ли другой способ достичь этого?

+0

Вы установили reloadOnSearch по маршруту? – Donal

+0

@Donal, я havent set reloadOnSearch, используя значения по умолчанию. – ibsenv

+0

ok, попробуйте установить его на false - тогда он не должен перезагружать контроллер. – Donal

ответ

2

Установите reloadOnSearch на false на маршруте - чтобы предотвратить перезагрузку контроллера при изменении параметра запроса или хеша в URL-адресе. Для получения дополнительной информации см. here.

reloadOnSearch относится только к параметрам запроса или хэшам. Поэтому вам придется использовать параметры запроса, чтобы он работал. Например, ваши ссылки будут что-то вроде этого:

<a href="#/test?id=1">Link 1</a> 
<a href="#/test?id=2">Link 2</a> 

Вы можете подобрать идентификатор с помощью $location службы, как это:

function testCtrl($scope, $location) { 
    alert("reloading controller with id: " + $location.search().id); 
} 

Там есть обновленная скрипка здесь: http://jsfiddle.net/donal/2cz4nz3o/1/

+0

Как вы предположили, я попробовал его с reloadOnSearch. Посмотрите на это [скрипка] (http://jsfiddle.net/HB7LU/13951/). Но не смог заставить его работать до сих пор. Это даже текущий способ использования reloadOnSearch? – ibsenv

+0

@ibsenv, к сожалению, reloadOnSearch относится к параметрам поиска (строки запроса). – Donal

+1

Спасибо :) '$ location.search()' и 'reloadOnSearch = false' отлично работает !!! – ibsenv

0

вот SO post по аналогичному вопросу, и некоторые ответы приводятся в ответах (альтернативы reloadOnSearch = false в зависимости от вашей заявки)

1

Поднимаясь от ответа Донала, это то, что я делаю.

  1. reloadOnSearch=false В маршрутизаторе.
  2. Маршрут Передав

    При получении направляются через URL, поймать параметры с помощью $location.search() и загрузить соответствующий шаблон внутри контроллера.

    При загрузке другого шаблона в контроллере. запускает функцию для изменения шаблона и обновления URL-адреса, используя $location.search('id',newTemplateId); Поскольку для reloadOnSearch установлено значение false, оно отмечает, но изменяет URL-адрес.

Посмотрите на этом fiddle

Надеется, что это помогает кому-то.

UPDATE: вы также можете установить $ routeUpdate при использовании reloadOnSearch. Больше информации here.

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