Хотя этот пост является старым и имеет принятый ответ, использование reloadOnSeach = false не решает проблему для тех из нас, кому нужно изменить фактический путь, а не только параметры. Вот простое решение:
Используйте ng-include вместо ng-view и назначьте свой контроллер в шаблоне.
{{variableInMyController}}
//in config
$routeProvider
.when('/my/page/route/:id', {
templateUrl: 'myPage.html',
})
//in top level controller with $route injected
$scope.templateUrl = ''
$scope.$on('$routeChangeSuccess',function(){
$scope.templateUrl = $route.current.templateUrl;
})
//in controller that doesn't reload
$scope.$on('$routeChangeSuccess',function(){
//update your scope based on new $routeParams
})
Только нижняя сторона - это то, что вы не можете использовать разрешить атрибут, но это довольно легко обойти. Также вам нужно управлять состоянием контроллера, например, логикой на основе $ routeParams, поскольку маршрут изменяется в контроллере по мере изменения соответствующего URL.
Вот пример: http: // plnkr. сотрудничество / редактировать / WtAOm59CFcjafMmxBVOP? р = предварительный просмотр