1
현재는 $ scope.newMsg 변수에 긴 폴링 결과를 푸시 할 수 있지만 $ scope.messages.push (msg) 메시지 목록에 추가하고 싶습니다.AngularJS Long Polling - 결과를 목록에 밀어 넣으십시오.
이 내 현재 app.js이다 : 나는 newMessagePoller에 컨트롤러를 통과 시도
var messageApp = angular.module('messageApp', ['ngResource']);
messageApp.run(function(newMessagePoller) {});
messageApp.factory('messagesService', function($resource) {
return $resource('/myapp/resources/message/all', {}, {
query: {method: 'GET', isArray: true}
});
});
messageApp.factory('newMessagePoller', function($http, $timeout) {
var data = {response: {}};
var poller = function() {
$http.get('/myapp/newmsg').then(function(r) {
data.response = r.data;
$timeout(poller, 1);
});
};
poller();
return {data: data};
});
messageApp.factory('createMessageService', function($resource) {
return $resource('/myapp/resources/message', {}, {
create: {method: 'POST'}
});
});
messageApp.factory('messageService', function($resource) {
return $resource('/myapp/resources/message/:id', {}, {
show: {method: 'GET'},
update: {method: 'PUT', params: {id: '@id'}},
delete: {method: 'DELETE', params: {id: '@id'}}
});
});
messageApp.controller('messageCtrl', function($scope, newMessagePoller, createMessageService, messagesService, messageService) {
$scope.messages = messagesService.query();
$scope.newMsg = newMessagePoller.data;
$scope.newMessage = function() {
var newEntry = createMessageService.create($scope.message);
$scope.messages.push(newEntry);
};
$scope.deleteMessage = function(msg) {
messageService.delete({id: msg.id});
$scope.messages.splice($.inArray(msg, $scope.messages), 1);
};
$scope.updateMessage = function(message) {
messageService.update(message);
};
});
:
내 접근 방식이 잘못 생각messageApp.factory('newMessagePoller', function($http, $timeout, messageController) {
var data = {response: {}};
var poller = function() {
$http.get('/basic-angularjs-ee/newmsg').then(function(r) {
data.response = r.data;
$timeout(poller, 1);
});
};
poller();
messagePoller.pushNewMessage(data.response);
});
...
$scope.pushNewMessage(msg) {
$scope.messages.push(msg);
}
, 어떤 도움이 많이 주시면 감사하겠습니다.
** 근무 코드 ** 내가 작업 코드를 얻으려면 다음과 같이 변경해야했습니다 (감사 domakas) :
messageApp.factory('newMessagePoller', function($http, $timeout) {
var data = {data: ''};
var poller = function() {
$http.get('/myapp/newmsg').then(function(r) {
data.data = r.data;
$timeout(poller, 1);
});
};
poller();
return data;
});
json으로 구조의 데이터 속성에 대한 응답으로 지정되어 있습니다.
$scope.$watch(
function() { return newMessagePoller.data; },
function(newMsg, oldMsg) {
$scope.newMsg = newMsg;
$scope.messages.push(newMsg);
}
);
컨트롤러에 $ watch 함수가 추가되었습니다.
basicly 서버가 새와 긴 폴링 요청을 채 웁니다 메시지 (json). 모든 작업을 수행하려면 목록에 새 메시지를 추가하십시오. 정확하게 오래 된 무엇입니까? – dngfng
이 시계는 지속적으로'newMessagePoller.data'의 값을 확인하고 콜백 함수 변수'new'는'newMessagePoller.data'의 새로운 값이고'old'는 이전의'newMessagePoller.data' 값입니다. 'if' 문은 실제로 변경된 값을 검사합니다. – domakas
컨트롤러에 추가했지만 작동하지 않는 것 같습니다. $ scope. $ watch ( function() {return newMessagePoller.data;}, function (newMsg, oldMsg) { $ scope.newMsg = msg; $ scope.messages.push (msg.response); } ); – dngfng