2015-10-22 7 views
5

Ich brauche in meiner App, um automatisch zu aktualisieren, wenn das Back-End ändert. Ich habe eine Schaltfläche hinzugefügt, um das GET zu meinem Back-End neu zu laden, aber ich möchte das nicht tun. Dies ist mein Codeangularjs automatisch neuladen, wenn Back-End-Änderung

<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> 

mein 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(); 
}); 

Dank

Antwort

9

Sie könnten nur Ihre Daten in regelmäßigen Abständen neu zu laden. Andernfalls müssten Sie etwas wie socket.io oder Pusher einrichten und Benachrichtigungen an den Browser senden, wenn der Server aktualisiert wird.

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(); 
}); 
+2

Sie sollten $ interval wie in @ Kelvins Antwort verwenden. Timeout wird nur einmal ausgeführt. – SolessChong

+0

können wir $ interval verwenden, aber wie man es stoppt? –

7

Sie können $interval(fuctionToRepeat, intervalInMillisecond) als dokumentiert here verwenden.

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); 
}); 

Hinweis: Intervalle von diesem Dienst erstellt wurden, müssen explizit zerstört werden, wenn Sie mit ihnen fertig sind. Insbesondere werden sie nicht automatisch zerstört, wenn der Bereich eines Controllers oder das Element einer Anweisung zerstört wird. Sie sollten dies berücksichtigen und sicherstellen, dass Sie das Intervall immer zum richtigen Zeitpunkt abbrechen.