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
5
A
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.
1
, bunu şöyle yapabilirsiniz:
$scope.$watch(function() { return $location.path() }, function() {
// Do stuff when the location changes
});
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
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. –
Ö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). –