SignalR ในแอปพลิเคชันหน้าเดียวเชิงมุมที่มีหลายเส้นทางที่รับฟังเหตุการณ์

ฉันมีแอปพลิเคชันเชิงมุมที่บางเส้นทางฟังข้อความ SignalR บางข้อความและข้อความบางข้อความถูกฟังหลายเส้นทาง ทุกอย่างทำงานได้ดี แต่เมื่อฉันนำทางจากเส้นทาง A ไปยังเส้นทาง B ฟังก์ชันตัวจัดการของเส้นทาง A สำหรับเหตุการณ์ SignalR ยังคงทำงานอยู่ ฉันใช้บริการเชิงมุมเพื่อรวมฮับ SignalR และติดตามฟังก์ชันการโทรกลับ ฉันคิดที่จะรีเซ็ตอาร์เรย์ของฟังก์ชันการโทรกลับทุกครั้งที่เปลี่ยนเส้นทาง แต่ฉันรู้สึกว่านั่นไม่ใช่วิธีที่ถูกต้องในการทำเช่นนี้ เนื่องจากควรมีการเชื่อมต่อฮับเพียงจุดเดียวและการจัดการเหตุการณ์เฉพาะเส้นทาง วิธีที่เหมาะสมในการดำเนินการนี้คืออะไร

บริการ SignalR เชิงมุม

app.factory('SignalRService', [function () {

    var eventCallbacks = [];

    var entityHub = $.connection.entityHub;

    entityHub.client.event = function (payload) {
        angular.forEach(eventCallbacks, function (callback, idx) {
            callback(payload);
        });
    };

    $.connection.hub.start({ transport: 'longPolling' })
        .done(function () {  })
        .fail(function () {  });

    return {
        subscribeToEvent: subscribeToEvent
    };

    function subscribeToEvent(callback) {
        eventCallbacks.push(callback);
    }


}]);

person Jeff Swensen    schedule 20.11.2013    source แหล่งที่มา


คำตอบ (2)


ทางออกที่ดีที่สุดดูเหมือนรีแฟกเตอร์เพื่อใช้ชุดค่าผสม $rootScope.$on และ $emit ที่นี่: https://stackoverflow.com/a/19498009/100776

person Jeff Swensen    schedule 20.11.2013

ฉันพบตัวอย่างที่ดีโดยใช้ $on และ $emit ที่นี่: http://sravi-kiran.blogspot.com/2013/09/ABetterWayOfUsingAspNetSignalRWithAngularJs.html

ขณะนี้กำลังพยายามหาวิธีที่ดีกว่าในการฉีด $.connection หรือการพึ่งพาพร็อกซีฮับ....

person Jason Capriotti    schedule 10.12.2013