मैं "ताज़ा" को AngularJS कैसे बता सकता हूं


168

मेरे पास एक क्लिक ईवेंट है जो मेरे कस्टम निर्देश के दायरे के बाहर होता है, इसलिए "एनजी-क्लिक" विशेषता का उपयोग करने के बजाय, मैं एक jQuery.click () श्रोता का उपयोग कर रहा हूं और मेरे कार्यक्षेत्र के अंदर एक फ़ंक्शन को कॉल कर रहा हूं:

$('html').click(function(e) {
  scope.close();
);

करीब () एक साधारण कार्य है जो इस तरह दिखता है:

scope.close = function() {
  scope.isOpen = false;
}

मेरे विचार में, मेरे पास "एनजी-शो" के साथ एक तत्व है जो इस तरह से ओपेन है:

<div ng-show="isOpen">My Div</div>

डीबग करते समय, मुझे पता चल रहा है कि नज़दीकी () को कॉल किया जा रहा है, isOpen को झूठा अपडेट किया जा रहा है, लेकिन AngularJS दृश्य अपडेट नहीं हो रहा है। क्या कोई तरीका है जो मैं मैन्युअल रूप से दृश्य को अद्यतन करने के लिए कोणीय को बता सकता हूं? या इस समस्या को हल करने के लिए एक और "कोणीय" दृष्टिकोण है जो मैं नहीं देख रहा हूं?

जवाबों:


315

बुलाना था उपाय ...

$scope.$apply();

... मेरे jQuery इवेंट कॉलबैक में।


9
यह लिंक सहायक होगा, मुझे लगता है। jimhoskins.com/2012/12/17/angularjs-and-apply.html
रोमन

6
क्या ऐसा नहीं होना चाहिए $scope.$apply();?
ErichBSchulz

आप $ स्कोप या स्कोप दोनों का उपयोग कर सकते हैं, यह सिर्फ एक नोटेशन अंतर है लेकिन इसका परिणाम समान है।
user1226868

4
@ErichBSchulz -Often में निर्देशों के अनुसार, मैं गुंजाइश को $ बिना उपयोग किए देखता हूं, जो मुझे विश्वास है कि इसके और '$ गुंजाइश' के बीच अंतर होने की संभावना है जो नियंत्रकों में इंजेक्ट हो जाती है। नियंत्रकों में, $ गुंजाइश द्वारा संदर्भ देना महत्वपूर्ण है, इसलिए कोणीय जानता है कि इंजेक्शन पर निर्भरता क्या है, जबकि एक निर्देश लिंक फ़ंक्शन में, यह हमेशा एक ही 4 तत्वों को ऑर्डिनल से गुजरता है और एक विशिष्ट नाम (गुंजाइश, तत्व, एटर्स, कंट्रोलर) की आवश्यकता नहीं होती है )।
cchamberlain

30

क्यों $applyबुलाया जाना चाहिए?

TL; DR : $applyजब भी आप कोणीय दुनिया के बाहर किए गए परिवर्तनों को लागू करना चाहते हैं, तो कॉल किया जाना चाहिए ।


बस @ डस्टिन के जवाब को अपडेट करने के लिए , यहां एक स्पष्टीकरण है कि $ क्या लागू होता है और यह क्यों काम करता है।

$apply()AngularJS ढांचे के बाहर से AngularJS में एक अभिव्यक्ति को निष्पादित करने के लिए उपयोग किया जाता है। (ब्राउज़र डोम इवेंट्स, सेटटाइमआउट, एक्सएचआर या थर्ड पार्टी लाइब्रेरी से उदाहरण के लिए)। क्योंकि हम AngularJS ढांचे में बुला रहे हैं, हमें अपवादों को संभालने , घड़ियों को निष्पादित करने के उचित गुंजाइश जीवन चक्र को करने की आवश्यकता है

कोणीय एक बाध्यकारी लक्ष्य के रूप में किसी भी मूल्य का उपयोग करने की अनुमति देता है। फिर किसी भी जावास्क्रिप्ट कोड मोड़ के अंत में, यह देखने के लिए जांचता है कि क्या मूल्य बदल गया है। वह चरण जो यह देखने के लिए जांचता है कि क्या कोई बाध्यकारी मान वास्तव में बदल गया है, एक विधि है, $scope.$digest()1 । हम लगभग इसे कभी भी सीधे नहीं कहते हैं, जैसा कि हम $scope.$apply()इसके बजाय उपयोग करते हैं (जो कॉल करेगा $scope.$digest)।

कोणीय केवल मॉनिटर चर भाव और एक के अंदर कुछ भी में प्रयोग किया जाता $watchदायरे के अंदर रहने वाले। इसलिए यदि आप कोणीय संदर्भ के बाहर के मॉडल को बदल रहे हैं, तो आपको $scope.$apply()उन परिवर्तनों को प्रचारित करने के लिए कॉल करने की आवश्यकता होगी , अन्यथा कोणीय को पता नहीं चलेगा कि उन्हें बदल दिया गया है इसलिए बंधन 2 को अपडेट नहीं किया जाएगा ।


14

उपयोग

$route.reload();

$routeअपने नियंत्रक को इंजेक्ट करना याद रखें ।


5
इसके अलावा, यूआई-राउटर का उपयोग करते समय, उपयोग करना सुनिश्चित करें$state.reload()
जेफरी रोसडेन्गल

यह हमारे स्क्रीनशॉट परीक्षणों के लिए सुपर सहायक था! हम राज्य का मजाक उड़ाते हैं, लेकिन कभी-कभी जरूरी नहीं कि देखने वाले भी बदलाव देखें, जिसके परिणामस्वरूप भ्रमित या रुक-रुक कर विफलता हो सकती है। लेकिन इस तरह गुंजाइश को फिर से लोड करने में सक्षम होने से मुकाबला करने में मदद मिलती है।
दिबांग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.