Skip to main content
 首页 » 编程设计

codeigniter之AngularJS 中的实时更新

2025年12月25日24JeffreyZhao

为了学习 Angular 和 Codeigniter,我扩展了最初的新教程(来自 CI)。在当前阶段,它会自动显示新帖子并从页面中删除已删除的帖子,当然还会更新模型/数据库。 -- 我认为我不是这样做对 AngularJS 最有效的方法。对我的代码的反馈将对此有所帮助。 --

但是,我主要关心的是 如何在 Angular 中进行差异更新?
当我通过 jQuery 完成此操作时,我只是在我的 ajax url 上附加了一个时间戳。然后我会在 Controller 中捕获那个时间并将其分配给一个变量并进行比较以提取任何其他帖子。效果很好。它只会拉新故事(如果它们存在),如果它们不存在,那么不会有太多开销。

然而,目前在 Angular 中,它会在每个请求(每 5 秒)中提取整个 JSON 数据——对于大型应用程序,这将消耗过多的带宽。我如何区分这一点并只拉新帖子?

controllers.js( Angular Controller )

var timestamp = ''; 
function NewsListCtrl($scope, $http, $timeout) {  
 
$scope.newsRequest = function(){ 
    $http.get('/ci/index.php/news/get_news_ajax/' + timestamp).success(function(data) { 
        timestamp = $.now(); 
        $scope.news = data; 
    }); 
}; 
$scope.newsRequest(); 
setInterval(function(){ 
    $scope.$apply(function(){ 
           $scope.newsRequest(); 
    }); 
}, 5000); 
 
} 

上面的代码成功地将时间传递到 URL 的第 3 段(根据 Codeigniter 的第 3 段)。当页面最初加载时,所有帖子都会出现。然后在 newsRequest() 再次触发后,我得到一个空白页。我假设因为没有任何更新的帖子,它会将空数组分配给我的 $scope.news。 我将如何解决这个问题以便附加较新的帖子?

(就像我说的,我假设我没有充分利用 AngularJS ng-repeat。如果有人有更好的解决方案,请赐教!)

请您参考如下方法:

您需要将加载的数据连接到 $scope.news。如果它是一个数组 - 容易

 $scope.news.concat(data); 

否则,您可能需要遍历加载的数据并添加新位。