@ লিভিউটের উত্তরটি দুর্দান্ত, তবে হ্যান্ডলারের টিয়ার-ডাউন ক্রিয়াকলাপটি অন্য কোনও সুযোগ বা ফাংশন থেকে কীভাবে পুনরায় অ্যাক্সেস করবেন তা ভাবতে ভাবতে অনেক লোক মনে হয়, যদি আপনি এটি তৈরির জায়গা বাদে অন্য কোনও জায়গা থেকে এটি ধ্বংস করতে চান। @। Мусабеков এর উত্তরটি দুর্দান্ত কাজ করে তবে খুব মূর্তিমান নয়। (এবং বেসরকারী প্রয়োগের বিশদ কী হতে পারে, যা যে কোনও সময় পরিবর্তন করতে পারে তার উপর নির্ভর করে)) এবং সেখান থেকে এটি আরও জটিল হয়ে ওঠে ...
আমি মনে করি এখানে সহজ উত্তরটি offCallMeFn
হ্যান্ডলারে নিজেই কেবল টিয়ার-ডাউন ফাংশনটির ( তার উদাহরণে) একটি রেফারেন্স বহন করা এবং তারপরে কোনও শর্তের ভিত্তিতে কল করে; সম্ভবত একটি যুক্তি যা আপনি ইভেন্টটি সম্প্রচারিত বা নির্গমন করতে অন্তর্ভুক্ত করেন। হ্যান্ডলাররা এইভাবে নিজেরাই ছিন্ন করতে পারেন, আপনি যখনই চান, যেখানেই চান নিজের ধ্বংসের বীজ বয়ে বেড়াচ্ছেন। তাই ভালো:
// Creation of our handler:
var tearDownFunc = $rootScope.$on('demo-event', function(event, booleanParam) {
var selfDestruct = tearDownFunc;
if (booleanParam === false) {
console.log('This is the routine handler here. I can do your normal handling-type stuff.')
}
if (booleanParam === true) {
console.log("5... 4... 3... 2... 1...")
selfDestruct();
}
});
// These two functions are purely for demonstration
window.trigger = function(booleanArg) {
$scope.$emit('demo-event', booleanArg);
}
window.check = function() {
// shows us where Angular is stashing our handlers, while they exist
console.log($rootScope.$$listeners['demo-event'])
};
// Interactive Demo:
>> trigger(false);
// "This is the routine handler here. I can do your normal handling-type stuff."
>> check();
// [function] (So, there's a handler registered at this point.)
>> trigger(true);
// "5... 4... 3... 2... 1..."
>> check();
// [null] (No more handler.)
>> trigger(false);
// undefined (He's dead, Jim.)
দুটি চিন্তা:
- এটি একবার রান হ্যান্ডলারের দুর্দান্ত সূত্র। শর্তসাপেক্ষে কেবল ড্রপ করুন এবং
selfDestruct
এটি আত্মঘাতী মিশনটি শেষ করার সাথে সাথে চালান ।
- আমি অবাক হয়েছি যে উত্সের সুযোগটি কখনই যথাযথভাবে ধ্বংস হয়ে যায় এবং আবর্জনা-সংগৃহীত হবে, আপনি ক্লোরোড ভেরিয়েবলের রেফারেন্স বহন করে রেখেছেন। আপনার এটির একটি মিলিয়ন ব্যবহার করতে হবে এমনকি এটির স্মৃতি সমস্যা হতে পারে তবে আমি কৌতূহলী। কারও কোন অন্তর্দৃষ্টি থাকলে দয়া করে শেয়ার করুন।