URL 막대의 변경 사항을보고이를 기반으로 특정 작업을 수행해야합니다. 변경 사항을보기 위해 시계를 추가하는 가장 좋은 방법은 무엇일까요? 당신이 당신의 컨트롤러에서 $ 위치 개체를 요청했다고 가정
5
A
답변
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에 약간의 오버 헤드가 생깁니다.
1
, 당신은 이런 식으로 작업을 수행 할 수 있습니다
$scope.$watch(function() { return $location.path() }, function() {
// Do stuff when the location changes
});
감사합니다. @blesh. 두 사건이 언제 발령되는지 그리고 그 사건의 차이점을 확인하려고합니다. 어떤 아이디어? – Lior
$ location의 초기화 코드에 모두 설정되어 있습니다. [GitHub에서 소스를보십시오] (https://github.com/angular/angular.js/blob/master/src/ng/location.js). $ locationChangeStart에 대해 CTRL + F 만 누르면됩니다. 기본적으로 $ watch() 메서드가 제안한 것과 동일하지만 이미 설정되어 있으므로 오버 헤드가 적습니다. –
간단히 말해'$ locationChangeStart'가 먼저 발생하고 전달 된 이벤트 객체에서'preventDefault()'를 사용하여 변경을 막을 수있는 옵션을 제공합니다. '$ locationChangeSuccess'는 위치가 성공적으로 변경된 후에 시작됩니다. (오히려 위치 변경에 전념 할 때). –