2013-01-31 10 views
12

क्या पाचन चक्र से दायरे को हटाने का कोई तरीका है? दूसरे शब्दों में, एक स्कोप डाइजेस्ट चक्र को निलंबित/फिर से शुरू करने के लिए?पाचन चक्र से स्कोप निकालें और पुनर्स्थापित करें

मेरे मामले में, मेरे पास पहले से ही लोड किए गए सभी पृष्ठ हैं, लेकिन उनमें से सभी दिखाई नहीं दे रहे हैं। इसलिए मैं उन लोगों को निलंबित करना चाहता हूं जो बेकार प्रसंस्करण से बचने के लिए दृश्यमान नहीं हैं। मैं ng-view + $route का उपयोग नहीं करना चाहता, मैं नहीं चाहता/गहरी लिंकिंग की आवश्यकता नहीं है।

मैंने this thread देखा और this fiddle पर पहुंचे। यह शायद काम करता है, लेकिन यह बहुत आक्रामक और बहुत ढांचा-अद्यतन-अनुकूल नहीं है।

क्या कोई अन्य समाधान है $scope.suspend() और scope.resume()? या एक कम आक्रामक (फ्रेमवर्क परिप्रेक्ष्य से)? मैं वर्तमान में $destroy और $compile चक्रों के बारे में सोच रहा हूं।

उत्तर

3

जैसा कि ढांचा आज खड़ा है, एक दायरे पर पचाने/फिर से शुरू करने के लिए कोई तरीका नहीं है। ऐसा कहकर ऐसी कई तकनीकें हैं जिनका उपयोग पाचन चक्र के हिस्से के रूप में निष्पादित घड़ियों की संख्या को सीमित करने के लिए किया जा सकता है।

सबसे पहले, यदि स्क्रीन के कुछ हिस्सों को छुपाया जाता है तो भी आप ng-switch निर्देशों के परिवार का उपयोग कर सकते हैं इस प्रकार पूरी तरह से डीओएम से अदृश्य हिस्सों को हटा सकते हैं।

दूसरे, अगर एक डाइजेस्ट चक्र $apply के माध्यम से अपने निर्देश से शुरू हो रहा है और आप बच्चे को देखता है फिर से मूल्यांकन को सीमित करना चाहते दायरों में से किसी $digest बजाय $apply कह सकते हैं।

फिर, हाँ, कोई भी आपके द्वारा लिंक की गई चर्चा में वर्णित स्कॉप्स को नष्ट और फिर से बना सकता है। लेकिन, अगर आप पहले से ही डोम के हिस्सों को छुपा रहे हैं तो यह ng-switch जैसा लगता है बेहतर विकल्प हो सकता है।

+0

'एनजी-स्विच' का उपयोग करना वास्तव में इस उपयोग के मामले के लिए एक महत्वपूर्ण विकल्प है। लेकिन क्या आपको विश्वास नहीं है कि यह उचित है कि गैर-कोणीय कोड का उपयोग करने वाला कोई व्यक्ति डीओएम के एक निश्चित हिस्से पर अपडेट को निलंबित करना चाहता है, बिना 'एनजी-स्विच' को हेरफेर को नियंत्रित किए बिना? हम निश्चित रूप से 'एनजी-स्विच' व्यवहार की नकल कर सकते हैं, लेकिन ऐसा लगता है कि यह बड़ी संकर परियोजनाओं पर प्रदर्शन ट्यूनिंग के लिए एक प्रमुख विशेषता है। इसके अलावा, शायद 'ng-bind' घड़ियों को रोकने के लिए एक तरीका केवल चलाने के लिए। पता नहीं ... कृपया अपने विचार साझा करें। –

12

मैं एक ही समस्या में भाग गया हूं और मुझे एक दिलचस्प समाधान मिला है जो AngularJS के साथ हस्तक्षेप नहीं करता है। दायरों में से किसी को निष्क्रिय करना चाहते करने के लिए इस जोड़ें:

var watchers; 

scope.$on('suspend', function() { 
    watchers = scope.$$watchers; 
    scope.$$watchers = []; 
}); 

scope.$on('resume', function() { 
    scope.$$watchers = watchers; 
    watchers = null; 
}); 

उसके बाद, आप एक गुंजाइश और के साथ अपने बच्चों को निष्क्रिय कर सकते हैं: scope.$broadcast('suspend') और इसे वापस लाने के scope.$broadcast('resume') साथ।

+0

अच्छी चाल। यह निश्चित रूप से चाल करेगा, हालांकि मुझे हैक्स को बहुत अच्छी तरह पसंद नहीं है क्योंकि यह संस्करणों को अपग्रेड करना कठिन बनाता है। वैसे भी, अगर कोई इस दृष्टिकोण का उपयोग करेगा, तो '$ scope। $ Watch' को ओवरराइड करना भी अच्छा होगा, क्योंकि विकलांगों के दौरान नए दर्शक जोड़े जा सकते हैं। –

+0

मैंने अभी इस तकनीक के बारे में एक छोटा सा लेख पोस्ट किया है: https://coderwall.com/p/d_aisq –

+0

इसने मुझे एक ऐप से बचाया जिसमें एक गैर-निष्पादक तालिका थी जो हर समय दिखाई नहीं दे रही थी। लंबा समाधान सॉर्ट करने योग्य टेबल को पगनेट करना और अनंत स्क्रॉल करना है ... लेकिन यह सड़क पर उतर सकता है ताकि हम अभी और अधिक महत्वपूर्ण विशेषताओं पर ध्यान केंद्रित कर सकें। अच्छा। तकनीकी ऋण वू! – FlavorScape

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

  • कोई संबंधित समस्या नहीं^_^