2012-09-06 13 views
131

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

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

पास() एक साधारण समारोह है कि इस तरह दिखता है है:

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

मेरे विचार में, मैं के साथ "एनजी शो" एक तत्व बाध्य है करने के लिए इस तरह खोलें:

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

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

उत्तर

243

समाधान कॉल करने के लिए था ...

$scope.$apply(); 

... मेरे jQuery घटना कॉलबैक में।

+9

यह लिंक उपयोगी होगा, मुझे लगता है। http://jimhoskins.com/2012/12/17/angularjs-and-apply.html – sorx00

+6

यह '$ स्कोप नहीं होना चाहिए। $ लागू();'? – ErichBSchulz

+0

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

10

उपयोग

$route.reload(); 

अपने नियंत्रक को $route इंजेक्षन करना न भूलें।

+1

इसके अलावा, यूई-राउटर का उपयोग करते समय, '$ state.reload() ' –

12

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

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


बस @Dustin's answer अद्यतन करने के लिए, यहाँ क्या$apply वास्तव में करता है और क्यों यह काम करता है की एक विवरण है।

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

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

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

+1

का उपयोग करना सुनिश्चित करें स्पष्टीकरण के साथ उत्तर की सराहना करें। धन्यवाद। – cheshireoctopus

संबंधित मुद्दे

 संबंधित मुद्दे