2013-03-15 41 views
2

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

不过,我主要关心的是如何在Angular中做差异更新? 当我通过jQuery完成这项工作时,我只需将一个时间戳添加到我的ajax url。然后我会在控制器中抓取那个时间&将它分配给一个变量&做一个比较来拉任何额外的帖子。它效果很好。它只会吸引新的故事(如果它们存在的话),如果它们不存在,则不会有太多的开销。

但是,目前在Angular中,它将每个请求(每5秒)拉动整个JSON数据 - 对于大型应用程序,这会消耗过多的带宽。我怎样才能区分这一点,只提取新帖子?

controllers.js(角控制器)

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的第三分段。最初加载页面时,将显示所有帖子。然后在newsRequest()再次触发后,我得到一个空白页面。我假设因为没有更新的帖子,它将空数组赋给我的$ scope.news。 我该如何解决这个问题,以便追加更新的帖子?

(就像我说的,我想我不会趁着AngularJS NG-重复,以最充分的。如果有人有更好的解决办法,请赐教!)

回答

1

我最终让事情按照我需要的方式工作。我的逻辑有一个巨大的缺陷。在我上面的代码中,我一直试图在当前时间$ .now()中传递,但为了拥有有效的逻辑,我需要在最后一篇文章的时间传递。这样,我可以比较是否有任何帖子是在我拉出的最后一个帖子后创建的。

var timestamp = ''; 
function NewsListCtrl($scope, $http, $timeout) { 
    $scope.news = []; 
    $scope.newsRequest = function(){ 
     $http.get('/ci/index.php/news/get_news_ajax/' + timestamp).success(function(data) { 
      $scope.news = data.recent.concat($scope.news); 
      if (data.recent[0] != null){ 
       timestamp = data.recent[0].time; 
      } 
     }); 
    }; 
$scope.newsRequest(); 
setInterval(function(){ 
    $scope.$apply(function(){ 
      $scope.newsRequest(); 
    }); 
}, 5000); 

的另一个大问题是,我数据对象中,我有一个数组里面。所以我需要访问该数组中的东西。在我看来,我已经得到了一些补偿,但那只是有点草率。让我的Angular Controller处理它会更干净。

东西要指出的是这行代码:

$scope.news = data.recent.concat($scope.news); 

后第一个得到它的工作,我最初concating data.recent$ scope.news末。但是这样做会将新项目显示在视图的末尾 - 而不是顶部。这是一个简单的修复,通过将$ scope.news连接到我的新对象/数组来获得它追加到顶端。

1

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

$scope.news.concat(data); 

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

+0

好主意。但我无法正确执行它。按照您列出的方式进行操作会给我一个错误,说明_ $ scope.news是undefined_。我将如何正确实施? – EnigmaRM 2013-03-15 21:19:08