2016-09-03 15 views
21

Iam कोणीय ढांचे के लिए नया है। यहां मेरा परिदृश्य है, जहां मैं अपना $ स्कोप बदलना चाहता हूं। समय के बाद व्यवहार्य है इसलिए मैंने जावास्क्रिप्ट setTimeout विधि का उपयोग किया।

$scope.variable='Previous'; 

setTimeout(function(){ 
$scope.variable='NEXT'; 
},3000); 

यह कोड मेरे लिए काम नहीं करता है। इस कोड को काम करने के लिए मैंने $apply() का उपयोग किया।

बाद में मुझे पता ही कोणीय एक $ टाइमआउट सेवा है जो एक ही काम करता है है कि आया था।

$scope.variable='Previous'; 
     $timeout(function() { 
      $scope.variable='NEXT'; 
    }, 2000); 

मैं जावास्क्रिप्ट setTimeout साथ $timeout सेवा के प्रदर्शन की तुलना कैसे कर सकते हैं ??

क्यों हम $timeout बजाय setTimeout का उपयोग करना चाहिए ??

मुझे कुछ उदाहरण और कारण इसका इस्तेमाल करने की है, जो प्रदर्शन से पता चलता दे।

धन्यवाद :)

+1

प्रदर्शन पूरी तरह से वर्तमान अनुप्रयोग के भीतर डाइजेस्ट चक्र के प्रदर्शन पर निर्भर करता है। $ टाइमआउट एक पाचन का कारण बन जाएगा। ऐसे ऐप के लिए जहां दर्शक की महत्वपूर्ण मात्रा है, जहां $ रूटस्कोप है।$ digest() 'ऐप को स्थिर करता है, यह एक बार फिर फ्रीज हो जाएगा। यह बहुत ही सरल है। – estus

उत्तर

17

कुछ ऐसे मामले हैं जहां किसी को टाइमआउट ऑपरेशन करने की ज़रूरत होती है और हम अक्सर जावास्क्रिप्ट के setTimeout() फ़ंक्शन का उपयोग करके इसे प्राप्त करते हैं।

हालांकि, अगर हम एक AngularJS आवेदन में setTimeout() का उपयोग हम भी $scope.$apply() का उपयोग करने के लिए सुनिश्चित करें कि scope में कोई परिवर्तन कहीं परिलक्षित होगा (क view में जो कि डेटा-बाउंड) की जरूरत है।

AngularJS इस के लिए एक उपयोगी आवरण प्रदान करता है: $timeout() - यह $apply() करता है जिसके लिए हम $apply परिवर्तन करने के लिए नहीं है।

प्रदर्शन के बारे में

यदि आप अनिवार्य रूप से अंतराल बनाने के लिए $timeout का उपयोग कर रहे हैं, तो इसका उपयोग न करें। यदि आपका आवेदन बड़ा है तो $apply$digest चक्र भी ट्रिगर करेगा जो आप वास्तव में ऐसा नहीं करना चाहते हैं, यह निश्चित रूप से प्रदर्शन को कम करेगा।

14

किसी भी AngularJS गुंजाइश चर जब बाहर (ajax सहित) से संभाला की जरूरत है एक $ लागू()।

$ टाइमआउट() वर्तमान क्षेत्र का ख्याल रखता है और बाद सभी परिवर्तन का पता लगाने के लिए किया जाता है एक ही पचाने चक्र में चलता है।

मैंने हाल ही में खोज की गई $ टाइमआउट() की एक सुंदरता है, यदि आप समय पैरामीटर पास नहीं करते हैं, तो यह डोम पूरा होने की प्रतीक्षा करेगा।

तो,

$timeout(function(){ 
    console.log("show after directive partial loaded") 
}); //note, no time parameter 

भागो एक निर्देश में इस कोड और टाइमआउट कॉलबैक फ़ंक्शन एक बार आंशिक निर्देश

आशा इस में मदद करता है के द्वारा लोड किया गया है सक्रिय किए जाएंगे।

+2

इसके अतिरिक्त, आप $ पैराआउट के दूसरे पैरामीटर के रूप में झूठी पास कर सकते हैं और यह $ लागू नहीं होगा। उपयोगी जब आप मैन्युअल रूप से $ पाइजेस्ट को नियंत्रित करना चाहते हैं – Ladmerc

+0

उत्तर विवरण पर अस्पष्ट है और संभवतः गलत जानकारी है। निर्देश उपयोग पर बयान बहुत दूर है और यह वास्तव में समझाता नहीं है कि यह सेटटाइम + $ स्कोप से अलग कैसे है। $ लागू करें। '$ टाइमआउट (() => {...}, ...)' अनिवार्य रूप से 'setTimeout (() => $ scope के रूप में समान है। $ आवेदन (..), ...)', तथ्य को छोड़कर कि पूर्व को '$ timeout.flush()' के साथ समकालिक रूप से परीक्षण किया जा सकता है (इसके अलावा, इसमें पाचन को छोड़ने का विकल्प भी है)। – estus

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