AngularJS中的Concat对象

时间:2013-03-18 20:07:44

标签: jquery angularjs concatenation

我正在使用AngularJS开发单页应用。目前我已经设置好了,所以每隔5秒就会调用一次DB来更新客户端模型。我想用时间戳错开东西。因此它不会从数据库中提取所有内容,而只是提取已经添加的所有内容(如果比上次调用更新)。 (节省带宽等)。 但这对我没有意义

角度控制器

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) {
            timestamp = $.now();

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

    $scope.newsRequest();
    setInterval(function(){
        $scope.$apply(function(){
            $scope.newsRequest();
        });
    }, 5000);
}

以上代码不会在页面上打印任何内容。第一个请求显示对象中的数据。但后续请求(带有时间戳)显示空对象。所以至少第一个请求应该打印出来。

初始请求中的数据样本

{"new":[{"id":"181","title":"not gonna work","slug":"not-gonna-work","time":"1363374669","text":"asdfs","deletetime":null}]}

当我删除

$scope.news = [];

然后我收到错误,说它未定义。

任何人都能够对正确的方法有所了解吗?

修改

根据答案,我已将代码更新为:

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) {
            timestamp = $.now();
            $scope.news = $scope.news.concat(data.new);   
    });
};
$scope.newsRequest();
setInterval(function(){
    $scope.$apply(function(){
           $scope.newsRequest();
    });
}, 5000);

所以现在数据仍然显示在页面上。但它实际上不再从模型中填充新数据。不确定这是否是逻辑中的问题。我正在使用

timestamp = $.now(); 

设置当前时间。它显示一个13位数的int。但是在我的数据库中,它显示了一个带有php时间函数的10位数字。

time()

这些冲突吗?

2 个答案:

答案 0 :(得分:10)

你应该连接数组本身(现在你将初始数组与哈希对象连接起来):

$scope.news = $scope.news.concat(data['new']);
/* data['new'] because your request returns `{new: []}`, consider changing it to `{news:[]}` */

答案 1 :(得分:2)

除了德米特里的回答,请使用

if ($scope.news == null) {
    $scope.news = [];
}

在回调中。

或者,将$scope.news = []移到回调之外。

更新您的新问题:

$.now()以毫秒为单位。 Unix时间以秒为单位(date +%s)(我拒绝承认PHP :P