AngularJS mit Server-Sent Events

Ich habe eine AngularJS app mit der Steuerung. Es funktionierte mit BEKOMMEN auf regelmäßige JSON-Ressource und manuelle updates anfordern, aber ich kann nicht damit es funktioniert mit Server-Sent Events. Das problem, das ich konfrontiert ist, dass, nachdem ich eine SSE-Ereignis und setzen/aktualisieren openListingsReport variable meiner Sicht nicht immer aktualisiert. Ich bin natürlich fehlt auch ein sehr einfaches Konzept. Bitte helfen Sie mir dieses Problem zu beheben.

var rpCtrl = angular.module('rpCtrl', ['rpSvc']);

rpCtrl.controller('rpOpenListingsCtrl', ['$scope', 'rpOpenListingsSvc',
    function ($scope, rpOpenListingsSvc) {
        $scope.updating = false;

        if (typeof(EventSource) !== "undefined") {
            //Yes! Server-sent events support!
            var source = new EventSource('/listings/events');

            source.onmessage = function (event) {
                $scope.openListingsReport = event.data;
                $scope.$apply();
                console.log($scope.openListingsReport);
            };
        }
    } else {
        //Sorry! No server-sent events support..
        alert('SSE not supported by browser.');
    }

    $scope.update = function () {
        $scope.updateTime = Date.now();
        $scope.updating = true;
        rpOpenListingsSvc.update();
    }

    $scope.reset = function () {
        $scope.updating = false;
    }
}]);
Ist EventSource gebunden an irgendeine Art von web socket (signalr, etc)? Sie können nicht nur setzen scope-Funktionen auf einer eckigen controller und erwarten, dass die server Anfragen zu senden es automatisch.
Die Ereignisquelle ist Teil des HTML-SSE-spec: developer.mozilla.org/en-US/docs/Web/API/EventSource der Server ist nicht das problem. Ich habe aktualisierte Wert von openListingsReport in der client JS. Ich kann einfach nicht machen AngularJS zu zeigen, der aktualisierte Wert von openListingsReport in HTML.
Ist die Ausgabe von console.log($scope.openListingsReport) undefined oder null oder einfach nur leer? Versuchen Sie, die Befestigung der message-Ereignis wie diesem: source.addEventListener('message', function(e) { console.log(e.data); }, false); ich fand diesen Artikel hilfreich: html5rocks.com/en/tutorials/eventsource/basics
Ich sehe, sorry. Versuchen Sie, Ihre $scope Deklaration innerhalb der $apply(): $scope.$apply(function(){ $scope.openListingsReport = event.data;}); Check this out: smartjava.org/content/...
Beachten Sie, dass Sie nur selten machen zu müssen $scope.$apply(); Dirty Kontrolle sollte behandeln die überwiegende Mehrheit von Fällen, einschließlich dieser

InformationsquelleAutor krl | 2014-08-06

Schreibe einen Kommentar