angularjs-scope - AngularJs को दोबारा निष्पादन दोबारा प्रसारित किया गया





(5)


यदि यह किसी भी व्यक्ति को मेरी मदद करता है तो मुझे निर्देश में एक समान समस्या थी। हर बार जब निर्देश जारी किया गया तो बार की संख्या में वृद्धि हुई।

मैंने इसे निम्नलिखित का उपयोग करके हल किया (यह मेरे नियंत्रकों init फ़ंक्शन में था, लेकिन मुझे लगता है कि यह नियंत्रक में ही परिभाषित किया जा सकता था। मेरे मामले में मेरे नियंत्रक को घटना को निकाल दिया गया था जब पुन: शुरू करने की जरूरत थी)

 if (!$scope.onMyEvent) $scope.onMyEvent= $scope.$on('myEvent',function(event,data){
        .....
        });

मेरे एक कोणीय नियंत्रक के अंदर, मेरे पास यह है:

// controller A
$rootScope.$on("myEventFire", function(event, reload) {
    someAction();
});

दूसरे नियंत्रक में मेरे पास यह है:

// controller B
$scope.openList = function(page) {
    $rootScope.$broadcast('myEventFire', 1);
}

अब, यह एक एकल पृष्ठ ऐप है जब मैं शुरू में नियंत्रक पर जाता हूं और इस घटना को ट्रिगर करने का प्रयास करता हूं , तो कुछ एक्शन () को एक बार निष्पादित किया जा रहा है। अगर मैं नेविगेट कर फिर से नियंत्रक ए पर वापस आ जाता हूं और एक ही काम करता हूं , तो कुछ एक्शन () दो बार निष्पादित हो जाता है अगर मैं इसे फिर से करता हूं, तो यह तीन गुना और ऐसा होता है। मुझसे यहां क्या गलत हो रहा है?




क्या आप केवल $scope.$on() का उपयोग कर सकते हैं $scope.$on() ? हर बार नियंत्रक ए बनाई जाती है, यह रूट स्कोप पर एक नया श्रोता जोड़ रहा है, और जब आप दूर और पीछे नेविगेट करते हैं तो उसे नष्ट नहीं किया जाता है यदि आप इसे नियंत्रक के स्थानीय क्षेत्र में करते हैं, तो जब आप नेविगेट करते हैं और आपके क्षेत्र को नष्ट हो जाता है तो श्रोता को निकालना चाहिए।

// controller A
$scope.$on("myEventFire", function(event, reload) {
    someAction();
});

$broadcast घटना को नीचे सभी बाल स्कोप में भेजता है, इसलिए यह आपके स्थानीय क्षेत्र पर उठाया जाना चाहिए। $emit रूट के दायरे की ओर बुलबुले दूसरे तरीके से काम करता है




$ rootScope से वापसी कॉलबैक चलकर आप इसे हटा सकते हैं। $ पर ()

अर्थात

var destroyFoo;

destroyFoo = $rootScope.$on('foo', function() {});

$scope.$on('$destroy', function() {
  destroyFoo(); // remove listener.
});       



मेरे मामले के लिए ...

if ($rootScope.$$listenerCount['myEventFire']) {
    $rootScope.$$listeners.broadcastShowMessageError = [];
};

$rootScope.$on('myEventFire', function (event, reload) {
    someAction();
})



इस प्रश्न का सीधा जवाब नहीं है बल्कि $event.currentTarget के "मुद्दे" के $event.currentTarget स्पष्ट रूप से शून्य पर सेट किया जाना चाहिए।

यह इस तथ्य के कारण है कि console.log निष्पादन की अंतिम स्थिति में गहरी म्यूटेबल ऑब्जेक्ट्स दिखाता है, न कि उस स्थिति में जब console.log कहा जाता था।

आप इसे अधिक जानकारी के लिए देख सकते हैं: console.log पर संगत कॉल असंगत परिणाम उत्पन्न करते हैं





angularjs angularjs-scope