我目前正在开发一个基于Web的Twitter客户端,因此我使用了angular.js,node.js和socket.io。我通过socket.io将新推文推送到我的客户端,服务等待新的推文。当一条新的推文到达时,该服务通过$ broadcast发送一个事件。
我的控制器中的是一个事件监听器,其中传入的推文正在单独的函数中处理。这个函数只是在我的推文范围内推送新的推文。
现在,我的问题是,我的观点没有更新,但我可以看到我的范围在增长。也许你们其中一个人有想法,我怎么能解决这个问题?
另外我的代码:
服务:
(function () {
app.factory('Push', ['$rootScope', function ($rootScope) {
socket.on('new-tweet', function (msg) {
$rootScope.$broadcast('new-tweet', msg);
});
}]);
}());
控制器:
(function () {
app.controller("StreamCtrl", function StreamCtrl ($scope, $rootScope, $http, Push) {
$scope.tweets = [];
$http
.get('/stream')
.then(function (res) {
$scope.tweets = res.data;
});
$scope.addTweet = function (data) {
$scope.tweets.push(data);
console.log($scope.tweets);
};
$rootScope.$on('new-tweet', function (event, data) {
if (!data.friends) {
$scope.addTweet(data);
}
});
});
}());
答案 0 :(得分:47)
在addTweet中添加以下代码行,问题就解决了
$scope.addTweet = function (data) {
$scope.tweets.push(data);
$scope.$apply();
console.log($scope.tweets);
};
答案 1 :(得分:1)
我更喜欢使用$timeout
(不要忘记将其注入您的控制器)而不是function dateObj(d) { // date parser ...
var parts = d.split(/:|\s/),
date = new Date();
if (parts.pop().toLowerCase() == 'pm') {
parts[0] = parts[0] + 12;
}
date.setHours(parts.shift());
date.setMinutes(parts.shift());
return date
}
var startTime = "7:30am";
var endTime = "9:30pm";
var now = new Date();
var startDate = dateObj(startTime); // get date objects
var endDate = dateObj(endTime);
var test = dateObj(startTime)
console.log(startDate, endDate)
:
$apply