Изменение параметров маршрута без обновления вида

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

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

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

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

Если у меня уже был http://www.example.com/#/page/:name маршрут.

Без перезагрузки местоположения. Можно ли просто установить $routeParams.name = "George"?

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

Ответы

Ответ 1

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

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

Я начал здесь: http://docs.angularjs.org/api/ng. $location Который взял меня здесь: http://docs.angularjs.org/guide/dev_guide.services. $Location Который взял меня на этот вопрос: AngularJS Paging с $location.path, но перезагрузка ngView

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Проверьте здесь, это отличная демонстрация.