2013-02-19 6 views
5

URL 막대의 변경 사항을보고이를 기반으로 특정 작업을 수행해야합니다. 변경 사항을보기 위해 시계를 추가하는 가장 좋은 방법은 무엇일까요? 당신이 당신의 컨트롤러에서 $ 위치 개체를 요청했다고 가정

답변

12

이벤트 그들은 단지 어떤 이유로 문서화하고, 존재한다. $locationChangeStart$locationChangeSuccess

scope.$on('$locationChangeStart', function (event, newLoc, oldLoc){ 
    console.log('changing to: ' + newLoc); 
}); 

scope.$on('$locationChangeSuccess', function (event, newLoc, oldLoc){ 
    console.log('changed to: ' + newLoc); 
}); 

또는 앤더스 제안대로 $는 $ 시계의 첫 번째 인수로 함수를 전달하여 원하는 값을 볼 수 있습니다 :

다음과 같은 이벤트를 시도하지만

scope.$watch(function() { return $location.path(); }, function(newLoc, oldLoc){ 
    console.log(newLoc, oldLoc); 
}); 

이렇게하면 $ digest에 약간의 오버 헤드가 생깁니다.

+0

감사합니다. @blesh. 두 사건이 언제 발령되는지 그리고 그 사건의 차이점을 확인하려고합니다. 어떤 아이디어? – Lior

+0

$ location의 초기화 코드에 모두 설정되어 있습니다. [GitHub에서 소스를보십시오] (https://github.com/angular/angular.js/blob/master/src/ng/location.js). $ locationChangeStart에 대해 CTRL + F 만 누르면됩니다. 기본적으로 $ watch() 메서드가 제안한 것과 동일하지만 이미 설정되어 있으므로 오버 헤드가 적습니다. –

+0

간단히 말해'$ locationChangeStart'가 먼저 발생하고 전달 된 이벤트 객체에서'preventDefault()'를 사용하여 변경을 막을 수있는 옵션을 제공합니다. '$ locationChangeSuccess'는 위치가 성공적으로 변경된 후에 시작됩니다. (오히려 위치 변경에 전념 할 때). –

1

, 당신은 이런 식으로 작업을 수행 할 수 있습니다

$scope.$watch(function() { return $location.path() }, function() { 
    // Do stuff when the location changes 
});