2015-07-15 10 views
6
this vs $scope के बीच

अंतर स्पष्ट रूप से इस प्रश्न का उत्तर है। जिन परियोजनाओं में मैं काम कर रहा हूं उनमें से एक, हमारा वरिष्ठ लड़का this$scope पर बहस कर रहा है, यह बहस करता है कि यह बेहतर प्रदर्शन प्रदान करता है।

मैं एक ही लेकिन सरकारी कोणीय दस्तावेज़ों के लिए किसी भी सबूत खोजने के लिए इस मामले पर बहुत सीमित जानकारी की क्या ज़रूरत है की कोशिश की।

किसी भी एक कृपया व्याख्या कर सकते हैं

  1. है this$scope पर बेहतर प्रदर्शन प्रदान (बशर्ते मैं $watch आदि का उपयोग नहीं करते)
  2. यदि हाँ क्या सही कारणों के लिए? $scope से this का उपयोग कर मौजूदा एप्लिकेशन को बदलने के लिए पर्याप्त प्रदर्शन सुधार पर्याप्त है?
+0

[कोणीय जेएस नियंत्रकों में यह बनाम $ गुंजाइश] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/11605917/this-vs-scope-in-angularjs-controllers) –

+0

कृपया प्रश्न स्पष्ट रूप से पढ़ें, मैं नहीं पूछ रहा हूं सम्मान मैं कुछ और पूछ रहा हूं – Yogesh

+4

इसे देखें: https://github.com/johnpapa/angular-styleguide –

उत्तर

5

कोणीय जेएस प्रदर्शन वर्तमान में लोड किए गए दृश्य (पृष्ठ) को बाध्य करने की संख्या और $watch का उपयोग करके मैन्युअल रूप से सेट किए जाने वाले घड़ियों की संख्या से प्रभावित होता है। यह सभी बाध्यकारी केवल $ स्कोप पर घोषित संपत्तियों पर काम करते हैं।

इसका मतलब यह है कि यदि आप एक संपत्ति देखने के लिए बाध्य नहीं कर रहे हैं या नहीं यह देखने के, तो आप बेहतर यह $ गुंजाइश (भी गुंजाइश प्रदूषण से बचने कहा जाता है) पर घोषणा नहीं।

this पर आ रहा है, जैसा एसओ पोस्ट this में बताया गया है, अंगुलर (जैसे कि एनजी-क्लिक के मामले में) और जब नियंत्रक बनाया जाता है तो अलग-अलग संदर्भ होता है।

तो कुछ भी जो आप this (नियंत्रक का जिक्र करते समय) पर घोषित करते हैं, तकनीकी रूप से दृश्य के लिए बाध्य नहीं हो सकता क्योंकि यह दायरे पर घोषित नहीं किया गया है।

लेकिन कोणीय एक controller as वाक्य रचना जहां यह हमें नियंत्रक वस्तु से अधिक संपत्तियों और विधि का उपयोग करने की अनुमति के साथ आया था। ऐसे परिदृश्य में ctrl.prop वाक्यविन्यास का उपयोग कर नियंत्रक पर घोषित गुण दृश्य में बाध्य हैं। जब आप ng-controller='HomeController as ctrl'

$scope.ctrl=this

कौन सा मूल रूप से इसका मतलब है कोणीय $scope को पूरा नियंत्रक वस्तु संलग्न है और इसलिए बाध्यकारी नियंत्रक गुण काम के साथ क्या आंतरिक कोणीय कुछ इस तरह से करता है।

तो प्रदर्शन की दृष्टि में महत्वपूर्ण बात केवल बाध्यकारी की संख्या है।

+0

इसलिए संक्षेप में ''''' scope' से '' का कोई प्रदर्शन लाभ नहीं है !? – Yogesh

+0

जैसा कि उल्लेख किया गया प्रदर्शन बाध्यकारी की संख्या द्वारा परिभाषित किया गया है, सीधे 'इस' या '$ स्कोप' से नहीं। यदि आप दायरे पर कई गुणों को परिभाषित करते हैं और इसका कभी भी उपयोग नहीं करते हैं, तो यह प्रदर्शन को प्रभावित नहीं करता है। – Chandermani

+2

इस मामले में, '' 'के बजाय' $ scope' का उपयोग करना बेहतर है? यदि मैं सही ढंग से समझता हूं, यदि 'नियंत्रक के रूप में' सिंटैक्स पूरे 'इस' को '$ scope'' का खुलासा करता है, तो इससे अधिक '$ स्कोप' प्रदूषण नहीं होता है, जिस विधि को हम केवल नियंत्रक में' $ स्कोप 'घोषित करते हैं जब हमें इसकी आवश्यकता होती है? – Neel

0

एंगुलरज दोनों एक दूसरे के लिए एक दूसरे के लिए उपयोग करते हैं इसलिए प्रदर्शन के संबंध में कोई अंतर नहीं है।

लेकिन this का उपयोग $scope से this के मुकाबले कम प्रदर्शन (यहां तक ​​कि कम नहीं) होना चाहिए, वस्तु का एक नया उदाहरण बनाता है। (। उदाहरण के लिए नाम से items.name)

  • अधिक प्रासंगिक
  • कोई विरोध बिना आसानी से नेस्टेड नियंत्रक इस्तेमाल किया जा सकता:

    लेकिन वास्तव में this का उपयोग कर अधिक सुरुचिपूर्ण तरीके के रूप में है।

+0

यह गलत है, – Chandermani

0

मान लीजिए कि आपने इसे देखा नहीं है प्रदर्शन बाधा नहीं बनाना चाहिए।

मेरी राय में, आपको पर controller पर कोई "यह" विधियां \ गुण नहीं होना चाहिए।
controller दृश्य का सबसे अच्छा दोस्त है और इसमें केवल प्रासंगिक गुण होना चाहिए।
एक प्रासंगिक संपत्ति एक ऐसी संपत्ति है जिसे आप अपने विचार (गुण, कार्य आदि) के अंदर बांधने जा रहे हैं।

आपकी सभी "यह" गुण शायद service पर होनी चाहिए।

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