angularjs在后端更改时自动重新加载

use*_*836 10 rest frontend backend angularjs

我的应用程序需要在后端更改时自动刷新.我添加了一个按钮来重新加载GET到我的后端,但我不希望这样做.这是我的代码

<body data-ng-app="myPr">
  <div ng-controller="TodosController">
    <div ng-repeat="todo in todos">
      <p>{{todo.title}} ...... {{todo.is_completed}}</p>
    </div>
    <button ng-click="reload()">Reload</button>
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

我的app.js.

var myPr = angular.module('myPr',[]);

myPr.controller("TodosController", function ($scope,$http){

  $scope.reload = function () {
    $http.get('http://localhost:3000/api/todos').
        success(function (data) {
          $scope.todos = data.todos;
      });
  };
  $scope.reload();
});
Run Code Online (Sandbox Code Playgroud)

谢谢

Dav*_*vic 15

您可以定期重新加载数据.否则,您需要设置类似socket.io或Pusher的东西,并在服务器更新时将通知推送到浏览器.

var myPr = angular.module('myPr',[]);

myPr.controller("TodosController", function ($scope,$http,$timeout){

  $scope.reload = function () {
    $http.get('http://localhost:3000/api/todos').
        success(function (data) {
          $scope.todos = data.todos;
      });

    $timeout(function(){
      $scope.reload();
    },30000)
  };
  $scope.reload();
});
Run Code Online (Sandbox Code Playgroud)

  • 您应该使用@Kelvin的答案中的$ interval.超时只执行一次. (4认同)

Kel*_*Lai 12

您可以$interval(fuctionToRepeat, intervalInMillisecond)按照此处的说明使用.

var myPr = angular.module('myPr',[]);

myPr.controller("TodosController", function ($scope,$http){

    $scope.reload = function () {
        $http.get('http://localhost:3000/api/todos').
            success(function (data) {
                $scope.todos = data.todos;
            });
    };
    $scope.reload();
    $interval($scope.reload, 5000);
});
Run Code Online (Sandbox Code Playgroud)

注意:完成后,必须明确销毁此服务创建的间隔.特别是当控制器的范围或指令的元素被销毁时,它们不会自动销毁.您应该考虑到这一点,并确保始终在适当的时候取消间隔.