2013-07-31 3 views
16

현재 전체 페이지를 다시로드하지 않고 경로 매개 변수를 변경하는 방법을 알아 내려고하고 있습니다. 예를 들어, 나는보기를 업데이트하지 않고 경로 매개 변수 변경

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

하지만 '조지'로 이름을 업데이트에로 경로를 변경하기 시작 :

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

이미 http://www.example.com/#/page/:name 라우팅 한 경우.

위치를 다시로드하지 않아도됩니다. 방금 $ routeParams.name = "George"를 설정할 수 있습니까?

편집 : 또는 , 다시로드하거나 페이지를 재설정하지 않고 http://www.example.com/#/page?name=George를 업데이트하는 방법이 있나요?

답변

37

많은 검색 후 확인. 나는 내 자신의 질문에 대답했다.

각도 문서에있는 내용을 찾기가 매우 어렵다는 것을 발견했습니다. 그러나 발견되면 문제에 대한 생각을 바꿉니다.

은 여기 시작 :..이 질문에 데려 갔다 http://docs.angularjs.org/guide/dev_guide.services $ 위치 을 : http://docs.angularjs.org/api/ng 여기 데려 $ 위치 은 내가 원했던 곳으로 $location.search({name: 'George'}); 추가 : 내가하고 결국 무엇 AngularJS Paging with $location.path but no ngView reload

이름을 변경하십시오 (A $ scope. $ watch).

그러나 맨 아래의 StackOverflow 링크에있는 것을 수행하고 $routeProvider.when에 전달하는 개체에 매개 변수를 추가하지 않는 한 페이지가 다시로드됩니다. 제 경우에는 다음과 같습니다 : $routeProvider.when('/page', {controller: 'MyCtrl', templateUrl:'path/to/template', reloadOnSearch:false}).

다른 사람에게 두통을 줄 수 있기를 바랍니다.

+2

이 솔루션은 쿼리 매개 변수를 추가하고 원래의 문제인 기존 routeParams를 대체하지 않습니다. 기존의 routeParams를 대체하기 위해 getter와 setter 인'$ location.path()'를 사용할 수 있습니다. – 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; 
    } 
}); 

특정 컨트롤러에 코드를 추가하면 더 지능적입니다.