2014-09-11 8 views
24
बटन पर क्लिक

Broadcating घटना: -

$scope.onButtonClick = function(){ 
    $rootScope.$broadcast('onButtonClick'); 
} 

और एक और नियंत्रक में पकड़ने घटना: -

$rootScope.$on('onButtonClick',function(event){ 
    alert("catched"); 
    console.log(event); 
}); 

लेकिन यह दो बार भी पकड़ा हालांकि यह केवल एक बार निकाल दिया। ऐसा क्यों है?

+5

अधिकांश शायद नियंत्रक के दो उदाहरणों सक्रिय हैं। एक आम कारण एक ही दृश्य पर '$ रूटप्रोवाइडर' नियंत्रक और 'एनजी-नियंत्रक 'का उपयोग है। – Chandermani

+0

तो इसे कैसे हल करें? क्या आप मेरी मदद कर सकते हैं? – Pratibha

+0

क्या आपके पास नियंत्रक के रूप में एनजी-नियंत्रक के साथ तत्काल आपका नियंत्रक है? यदि ऐसा है, तो एनजी-नियंत्रक विशेषता हटा दें। एनजी-कंट्रोलर, यूरोउटर और एनजीआरओटर के साथ नियंत्रक को इंस्टेंट करना एक या दूसरी पसंद है। यदि आप दो बार नियंत्रक को तुरंत चालू करते हैं तो आपके पास इसके दो उदाहरण होंगे। – Martin

उत्तर

39

चूंकि यह निकला कि ng-controller एचटीएमएल में घोषणा और ui-router के लिए राज्य सेटअप के हिस्से के रूप में कई नियंत्रकों को तत्काल हटा दिया गया था।

समाधान घोषणाओं में से एक को निकालना है।

+1

ने एचटीएमएल में एनजी-कंट्रोलर घोषणा हटा दी क्योंकि मैंने इसे पहले ही राउटर में राज्य सेटअप के रूप में जोड़ा है। चीजें अब ठीक काम करती हैं। धन्यवाद! –

9

यदि आप $rootScope पर कोई ईवेंट प्रसारित करते हैं, तो आप प्रत्येक नियंत्रक $scope पर ईवेंट को पकड़ सकते हैं। आईएमओ आपको $rootScope पर ईवेंट नहीं पकड़ना चाहिए।

$scope.$on('onButtonClick',function(event){ 
    alert("catched"); 
    console.log(event); 
}); 

मैंने एक प्लंकर शोकेस बनाया है, जो दिखाता है कि यह बिल्कुल अपेक्षित रूप से काम करता है। Plunker

यह संभव हो सकता है कि आपके पास एक ही नियंत्रक के कई उदाहरण हैं, जहां आप ईवेंट को पकड़ते हैं। चांदर्मनी के सुझाव के रूप में इसे जांचें।

+0

यह अभी भी दो बार पकड़ा गया है ... – Pratibha

+0

@ user59442: आपका पहला कथन वैध है और एक टिप्पणी के लिए अच्छा है। लेकिन आपका अंतिम बयान गलत है। यह एक जवाब नहीं है। – gkalpak

+0

का मतलब है, मुझे यह नहीं मिला ??? कौनसा बयान? – Pratibha

4

कोणीय $rootScope.$broadcast() घटना नियंत्रक में दो बार पकड़ा

$scope.$on('saveCancelLeadInfo', function (event, args) { 
    if ($scope.$$listenerCount["saveCancelLeadInfo"] > 1) { 
     $scope.$$listenerCount["saveCancelLeadInfo"] = 0; 
    } 
    your code here 
}); 
+1

इससे मेरी मदद मिली। – MilesStanfield

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