如何在不重新加载页面的情况下使用Angularjs轮询新数据

如何在不重新加载页面的情况下使用Angularjs轮询新数据,angularjs,real-time,angular-http,Angularjs,Real Time,Angular Http,我是Angular方面的新手,请原谅我的无知,但我正在尝试了解如何在不重新加载页面的情况下实时轮询数据,以便所有事情都在后台发生。我使用setInterval每5000ms获取一次数据,但据我所知,这对于浏览器来说是昂贵的,因为我一直在加载json文件 如果服务器上有新数据,最好的监视或获取解决方案是什么?因此,当json文件使用新用户朋友更新时,页面将提供新数据,而无需我重新加载页面或点击按钮刷新。我基本上是在寻找实时性 视图: 控制器: angular .module ('myApp

我是Angular方面的新手,请原谅我的无知,但我正在尝试了解如何在不重新加载页面的情况下实时轮询数据,以便所有事情都在后台发生。我使用setInterval每5000ms获取一次数据,但据我所知,这对于浏览器来说是昂贵的,因为我一直在加载json文件

如果服务器上有新数据,最好的监视或获取解决方案是什么?因此,当json文件使用新用户朋友更新时,页面将提供新数据,而无需我重新加载页面或点击按钮刷新。我基本上是在寻找实时性

视图:

控制器:

angular
    .module ('myApp')
    .controller ('summaryCtrl', ['$scope', 'Friends', function ($scope, Friends) {
        $scope.title = "Friends";
        $scope.loadData = function () {
            Friends.get ().then (function (data) {
                $scope.friends = data;
            });
        };

        //initial load
        $scope.loadData();

        var timer = setInterval(function(){
            $scope.loadData();

        },5000);

    }]);

非常感谢您的帮助,如果问题没有任何意义,请再次道歉。

您所做的一切都没有问题,只是您应该使用$interval service not setInterval。我非常怀疑使用$interval或setInterval会导致任何性能问题。这是正确的,您所做的没有问题。尽管如此,这始终是一个http获取,这并不是一个特别好的解决方案。若你们想实时添加新闻,为什么不四处看看呢?谢谢你们。你会像这样做吗?这会让我的生活更轻松吗?你的后端支持服务器端事件吗?另一种方法是在angular中设置EventSource侦听器。
angular
    .module ('myApp')
    .factory ('Friends', ['$http', function ($http) {
        return {
            get: function () {
                return $http.get ('users.json').then (function (response) {  
                    return response.data;
                });
            }
        };
    }]);
angular
    .module ('myApp')
    .controller ('summaryCtrl', ['$scope', 'Friends', function ($scope, Friends) {
        $scope.title = "Friends";
        $scope.loadData = function () {
            Friends.get ().then (function (data) {
                $scope.friends = data;
            });
        };

        //initial load
        $scope.loadData();

        var timer = setInterval(function(){
            $scope.loadData();

        },5000);

    }]);