2013-02-19 19 views
5

में एक $ स्थान प्रदाता को देखने के लिए मुझे URL बार पर परिवर्तन देखने और उस पर आधारित कुछ क्रियाएं करने की आवश्यकता है। मुझे आश्चर्य हुआ कि इसमें बदलाव देखने के लिए घड़ी जोड़ने का सबसे अच्छा तरीका क्या है?Angular.js

उत्तर

12

घटनाक्रम मौजूद हैं, वे सिर्फ किसी कारण से undocumented रहे हैं।

निम्न इवेंट का प्रयास करें: $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); 
}); 

हालांकि यह आपके $ पाचन पर थोड़ा अधिक ओवरहेड बनाएगा।

+0

धन्यवाद @blesh। यह पहचानने की कोशिश कर रहा है कि दो घटनाएं कब उत्सर्जित होती हैं और उनके बीच क्या अंतर होता है। कोई विचार? – Lior

+0

यह सभी $ स्थान के लिए प्रारंभिक कोड में स्थापित है। [गिटहब पर स्रोत देखें] (https://github.com/angular/angular.js/blob/master/src/ng/location.js)। $ LocationChangeStart के लिए बस CTRL + F। यह मूल रूप से $ घड़ी() विधि के जैसा ही सुझाया गया है, लेकिन यह आपके लिए पहले से स्थापित है, इसलिए कम ओवरहेड है। –

+0

संक्षेप में, '$ locationChangeStart' पहले होता है और आपको ईवेंट ऑब्जेक्ट पर' preventDefault() 'के साथ परिवर्तन को रोकने के लिए एक विकल्प देता है। स्थान सफलतापूर्वक बदल दिए जाने के बाद '$ locationChangeSuccess' आग लगती है। (बल्कि, जब आप स्थान बदलने के लिए प्रतिबद्ध हैं)। –

1

यह मानते हुए कि आप अपने नियंत्रक में $ स्थान वस्तु का अनुरोध किया है, तो आप इसे इस तरह से कर सकते हैं:

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