2013-12-18 18 views
42

मेरे पास कोड स्निपेट है जिसमें एक कोणीय मॉड्यूलर नियंत्रक है, लेकिन एक ही नियंत्रक के अंदर एक फ़ंक्शन है और एक कॉल के साथ, जो मेरे दिमाग में संदेह बढ़ा रहा है कि इस तरह कोडिंग की अनुमति है जावास्क्रिप्ट या कोणीय? यदि हां तो यह कैसे पढ़ता है? नीचे दिए गए कोड प्रारूप देखें मेरे पास है:AngularJS नियंत्रक के अंदर फ़ंक्शन

obj.controller('CartController',function($scope){ 

    $scope.totalCart = function(){ 
    var total = 10;  
    return total; 
    } 
    function calculate(){ 
    ...Some Logic.. 
    } 

    $scope.$watch($scope.totalCart, calculate); 
)}; 

कृपया मेरी मदद समझते हैं कि समारोह परिभाषा के इस प्रकार है और एक नियंत्रक कोणीय/जावास्क्रिप्ट में अनुमति के भीतर कॉल करने के लिए?

उत्तर

68

calculate() एक निजी समारोह है एक ही प्रभावित करते हैं - यह CartController के दायरे में ही उपलब्ध है। यदि आपको दृश्य में अपने कार्य का उपयोग करने की आवश्यकता नहीं है तो इसे निजी बनाना अच्छा विचार है। यह कहता है कि यह दृश्य में उपयोग करने के इरादे से नहीं है, इसलिए अगर कोई और इस कोड के साथ काम करेगा तो इसे देखने में दो बार सोचना चाहिए। इसके अलावा: calculate के भीतर से आपके पास CartController (CartController पर पैरामीटर के रूप में पारित वस्तुओं सहित) की सभी वस्तुओं तक पहुंच है।

इस तरह से घोषित फ़ंक्शन एक उचित JS function है, जिसका अर्थ है कि आप इसके नाम से इसका संदर्भ प्राप्त कर सकते हैं।

function someFn (...) { ... } 

function someOtherFn (...) { ... } 

... 

$scope.someFn = someFn 

ऊपर स्निपेट में इरादों बहुत हैं: कभी कभी यह करता है, तो आप यह घोषणा/अग्रिम में अपने समारोह बना सकते हैं और उसके बाद ही किसी अन्य वस्तु के गुणों के लिए उन्हें आवंटित (इस मामले $scope में) अधिक पठनीय माना जाता है स्पष्ट करें: someFn सुलभ बनाएं, जबकि someOtherFn निजी रखें।

बीटीडब्ल्यू। घोषित कार्यों जैसे: function nameFn(...){...} को फ़ंक्शन स्टेटमेंट कहा जाता है; आप इसे समान रूप से ऐसा कर सकते हैं: var nameFn = function(...) {...} (तथाकथित फ़ंक्शन अभिव्यक्ति)। वहाँ उन में कुछ अंतर है - मूल रूप से यह अवैध है:

someFn(); 
var someFn = function(...) {...} 

जबकि, इस काम करता है:

someFn(); 
function someFn(...) {...} 

कभी-कभी आप इस पद्धति का उपयोग करने के लिए मजबूर नहीं है, उदा देखो इस answer पर इस question पर।

+0

उत्कृष्ट विवरण – Padyster

1

परिभाषा की अनुमति दी है, यह के रूप में

$scope.$watch($scope.totalCart, function(){..some logic...}) 
4
$scope.launch = function (which) { 

}; 
var _func = function() {...} 
संबंधित मुद्दे