6

जब, जहां और कैसे मैं पुराने घटना श्रोताओं से छुटकारा पाने चाहिए जब नियंत्रक अब प्रासंगिक नहीं है?नियंत्रक से आवंटित घटनाओं को कैसे साफ़ करें?

दो मार्गों के साथ SPA पर विचार करें: /login और /loggedin

app.factory('socket', ['$window', function(window) { 
    return window.io(); 
}]); 
app.controller('loginController', ['socket', function (socket) { 
    this.tryLogin = function(credentials) { 
     socket.emit('login', credentials); 
    } 
    sokcet.on('loginResponse', function(data) { 
     if (data.status == 'OK') { 
      // Navigate to loggedInController 
     } else { 
      // Show error message and keep listening - user might try again 
     } 
    }); 
}]); 
app.controller('loggedInController', ['socket', function (socket) {/* Logged in, but loginController is still listening for loginResponse */}]); 

समस्याएं:

  • जब /loggedin पर नेवीगेट करने की तो loginResponse घटना सुनने रहता
  • जब /login पेज नया करने के लिए वापस नेविगेट श्रोता जोड़ा जाता है

उत्तर

5

कोणीय के $scope.$on('$destroy') घटना पर एक नजर डालें और इसे एक साथ उपयोग socket.io के removeListener विधि के साथ (प्रभावी रूप से मैं अब 2 श्रोताओं है)। इस तरह कुछ:

app.controller('loginController', ['$scope', 'socket', function ($scope, socket) { 
    this.tryLogin = function(credentials) { 
     socket.emit('login', credentials); 
    } 

    socket.on('loginResponse', loginResponse); 

    $scope.$on('$destroy', function() { 
     socket.removeListener('loginResponse', loginResponse); 
    }); 

    function loginResponse(data) { 
     if (data.status == 'OK') { 
      // Navigate to loggedInController 
     } else { 
      // Show error message and keep listening - user might try again 
     } 
    } 
}]); 
+0

अब मुझे '$ destory' घटना के साथ एक ही समस्या है, है ना? अगर मैं गलत हूं, तो मुझे सही करें, फिर भी कोणीय सीखना .. – Kristian

+0

ओह, $ से जुड़े सभी सूचीओं के साथ $ स्कोप destorys? – Kristian

+1

जब कोणीय में एक गुंजाइश नष्ट हो जाती है तो सभी संबंधित '$ ऑन' ईवेंट हैंडलर [इसके साथ नष्ट हो जाते हैं] (https://stackoverflow.com/a/27016855/2039244)। – sdgluck

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