Изменение параметров маршрута без обновления вида
В настоящее время я пытаюсь выяснить, как изменить параметры маршрута без перезагрузки всей страницы. Например, если я начинаю с
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, который отлично подходит для переключения между состояниями без перезагрузки страницы. Единственное падение - вы должны изменить все свои маршруты.
Проверьте здесь, это отличная демонстрация.