2013-02-19 14 views
5

URL çubuğundaki değişiklikleri izlemem ve buna göre belirli eylemler gerçekleştirmem gerekiyor. Değişiklikleri görüntülemek için bir saat eklemenin en iyi yolunun ne olduğunu merak ettim. Eğer denetleyicisi $ konum nesne talep etmiş olduğu varsayıldığında

cevap

12

Olaylar onlar sadece nedense belgesiz ediyoruz, mevcuttur. $locationChangeStart ve $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); 
}); 

Veya Anders önerildiği şekilde $ $ saatin ilk argüman içine bir işlev geçirerek istediğiniz herhangi bir değeri izleyebilirsiniz:

aşağıdaki olayları deneyin Ancak

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

Bu, $ özetinizde biraz daha fazla yük oluşturur.

+0

Teşekkürler @blesh. İki olayın ne zaman yayıldığını ve aralarındaki farkın ne olduğunu anlamaya çalışmak. herhangi bir fikir? – Lior

+0

Her şey $ location için başlangıç ​​kodunda kuruldu. [GitHub kaynağına bir bakın] (https://github.com/angular/angular.js/blob/master/src/ng/location.js). $ LocationChangeStart için sadece CTRL + F. Temelde, önerilen $ watch() yöntemiyle aynıdır, ancak zaten sizin için ayarlanmıştır, bu nedenle daha az masraf vardır. –

+0

Özetle, '$ locationChangeStart' önce gelir ve size iletilen olay nesnesinde 'preventDefault() 'ile değişikliği önlemek için bir seçenek sunar. Konum başarıyla değiştirildikten sonra '$ locationChangeSuccess' patlar. (yerine, konumu değiştirmeye karar verdiğinizde). –

1

, bunu şöyle yapabilirsiniz:

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