2013-02-19 24 views
5

Tôi cần xem các thay đổi trên thanh URL và thực hiện một số hành động nhất định dựa trên đó. Tôi tự hỏi cách tốt nhất để thêm một chiếc đồng hồ để xem những thay đổi đối với nó là gì?

Trả lời

12

Sự kiện tồn tại, chúng tôi chỉ cung cấp tài liệu cho một số lý do.

Hãy thử các sự kiện sau: $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); 
}); 

Hoặc bạn có thể $ xem bất kỳ giá trị mà bạn muốn bằng cách truyền một hàm vào đối số đầu tiên là $ đồng hồ như Anders gợi ý:

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

Tuy nhiên điều này sẽ tạo thêm một chút chi phí trên $ digest của bạn.

+0

Cảm ơn @blesh. cố gắng xác định khi nào hai sự kiện được phát ra và sự khác biệt giữa chúng. bất kỳ ý tưởng? – Lior

+0

Tất cả được thiết lập trong mã khởi tạo cho $ location. [Hãy xem mã nguồn trên GitHub] (https://github.com/angular/angular.js/blob/master/src/ng/location.js). Chỉ CTRL + F cho $ locationChangeStart. Về cơ bản nó giống như phương thức $ watch() được đề xuất, nhưng nó đã được thiết lập cho bạn, vì vậy có ít chi phí hơn. –

+0

Tóm lại, '$ locationChangeStart' xảy ra đầu tiên và cung cấp cho bạn một tùy chọn để ngăn thay đổi với' preventDefault() 'trên đối tượng sự kiện được truyền cho nó. '$ locationChangeSuccess' kích hoạt sau khi vị trí được thay đổi thành công. (thay vào đó, khi bạn đã cam kết thay đổi vị trí). –

1

Giả sử rằng bạn đã yêu cầu $ vị trí đối tượng trong điều khiển của bạn, bạn có thể làm điều đó như thế này:

$scope.$watch(function() { return $location.path() }, function() { 
    // Do stuff when the location changes 
}); 
Các vấn đề liên quan