2013-07-31 2 views
16

В настоящее время я пытаюсь выяснить, как изменить параметры маршрута без перезагрузки всей страницы. Например, если я начну наИзменить параметры маршрута без изменения вида

http://www.example.com/#/page

но обновить имя, чтобы быть «Джордж», чтобы изменить маршрут, чтобы быть:

http://www.example.com/#/page/george

Если я уже http://www.example.com/#/page/:name разгромлена.

Не перегружая место. Можно ли просто установить $ routeParams.name = «Джордж»?

Edit: Кроме того, есть ли способ обновить http://www.example.com/#/page?name=George без перезагрузки или сброса страницы?

ответ

37

Хорошо, после многого поиска. Я ответил на свой вопрос.

Я обнаружил, что найти что-либо в угловой документации невероятно невозможно, но иногда, когда оно обнаружено, оно меняет то, как вы думали о своей проблеме.

Я начал здесь:. http://docs.angularjs.org/api/ng $ место Который взял меня здесь:. http://docs.angularjs.org/guide/dev_guide.services $ расположение Который взял меня на этот вопрос: AngularJS Paging with $location.path but no ngView reload

То, что я в конечном итоге делает: Я добавил $location.search({name: 'George'}); туда, где я хотел измените имя (A $ scope. $ watch).

Однако это все равно перезагрузит страницу, если вы не сделаете то, что находится в этой нижней ссылке StackOverflow, и добавьте параметр к объекту, который вы передаете в $routeProvider.when. В моем случае это выглядело так: $routeProvider.when('/page', {controller: 'MyCtrl', templateUrl:'path/to/template', reloadOnSearch:false}).

Надеюсь, это избавит кого-то еще от головной боли.

+2

Это решение добавляет параметры запроса и не заменяет существующий routeParams, который был вашей исходной проблемой. Чтобы заменить существующий routeParams, вы можете использовать '$ location.path()', который является getter и setter. – Swordfish0321

+0

Есть ли способ обновить определенный параметр без запуска обновления с помощью '$ location.path()'? –

+0

$ location.search() возвращает объект, содержащий параметры, обновляет тот, который вы хотите, и передает его снова в $ location.search ({}). –

-5

Вы можете изменить отображение страницы с помощью ng-show и ng-hide, эти переходы не перезагружат страницу. Но я думаю, что проблема, которую вы пытаетесь решить, заключается в том, что вы хотите, чтобы у вас была возможность закладок на странице, сможете нажимать обновление и получить нужную вам страницу.

Я бы предложил реализовать угловой ui-router, который отлично подходит для переключения между состояниями без перезагрузки страницы. Единственное падение - вы должны изменить все свои маршруты.

Check it out here theres отличная демонстрация.

10

Я действительно нашел решение, которое я считаю немного более изящным для своего приложения.

в $ locationChangeSuccess событие немного грубой силы подход, но я обнаружил, что проверка путь позволяет избежать перезагрузок страницы, когда путь маршрута шаблон не меняется, но перезагружает страницу при переходе на другой маршрут шаблон:

var lastRoute = $route.current; 
$scope.$on('$locationChangeSuccess', function (event) { 
    if (lastRoute.$$route.originalPath === $route.current.$$route.originalPath) { 
     $route.current = lastRoute; 
    } 
}); 

Добавление этого кода в конкретный контроллер делает перегрузку более интеллектуальной.