SignalR dalam aplikasi satu halaman Angular dengan banyak rute yang mendengarkan acara

Saya memiliki aplikasi Angular di mana rute tertentu mendengarkan pesan SignalR tertentu dan beberapa pesan didengarkan oleh beberapa rute. Semuanya berfungsi dengan baik tetapi ketika saya menavigasi dari Rute A ke Rute B, fungsi pengendali Rute A untuk peristiwa SignalR masih diaktifkan. Saya menggunakan layanan Angular untuk menggabungkan hub SignalR dan melacak fungsi panggilan balik. Saya mempertimbangkan untuk menyetel ulang rangkaian fungsi panggilan balik pada setiap perubahan rute, tetapi saya merasa itu bukan cara yang tepat untuk melakukan ini. Mengingat seharusnya hanya ada satu koneksi hub dan penanganan kejadian khusus rute, apa cara yang tepat untuk melakukan ini?

Layanan SignalR Sudut

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 sumber


Jawaban (2)


Solusi terbaik sepertinya adalah refactor untuk menggunakan kombinasi $rootScope.$on dan $emit di sini: https://stackoverflow.com/a/19498009/100776

person Jeff Swensen    schedule 20.11.2013

Saya menemukan contoh bagus menggunakan $on dan $emit di sini: http://sravi-kiran.blogspot.com/2013/09/ABetterWayOfUsingAspNetSignalRWithAngularJs.html

Saat ini mencoba menemukan cara yang lebih baik untuk memasukkan ketergantungan $.connection atau proxy hub....

person Jason Capriotti    schedule 10.12.2013