AngularJS z zdarzeniami wysłanymi przez serwer
Mam aplikację AngularJS z następującym kontrolerem. To działało dobrze z GET na zwykłych zasobów JSON i ręczne żądanie aktualizacji, ale nie mogę zrobić to działa z serwera wysłane zdarzenia. Problem, z którym się borykam, polega na tym, że po otrzymaniu zdarzenia SSE i ustawieniu / aktualizacji zmiennej openListingsReport mój widok nie jest aktualizowany. Oczywiście brakuje mi bardzo podstawowego pojęcia. Proszę, pomóż mi to naprawić.
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;
}
}]);
12
2 answers
Problem był w następującej linijce:
$scope.openListingsReport = event.data;
Które powinno być:
$scope.openListingsReport = JSON.parse(event.data);
7
Author: krl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-06 21:35:55
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-06 21:35:55
Tylko sugestia na wypadek, gdyby ktoś używał SSE z AngularJs.
Jeśli chcesz użyć zdarzeń po stronie serwera ,proponuję użyć Usługi $ interval, która jest wbudowana w AngularJS zamiast SSE.
Poniżej znajduje się podstawowy przykład.
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body>
<div ng-app="myApp" ng-controller="myCtrl">
<p>Randome no:</p>
<h1>{{myWelcome}}</h1>
</div>
<p>The $interval service runs a function every specified millisecond.</p>
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function ($scope, $interval, $http) {
$scope.myWelcome = new Date().toLocaleTimeString();
$interval(function () {
$scope.myWelcome = $http.get("test1.php").then(function (response) {
$scope.myWelcome = response.data;
});
}, 3000);
});
</script>
</body>
</html>
Test1.php
<?php
echo rand(0,100000);
0
Author: Vaibs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-21 12:35:49
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-21 12:35:49