Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Refresh scope on every x time using $timeout

I am a newbie to angular. I want to use $timeout of angular to refresh scope after few minutes. I am working on an social app where i need to refresh notification scope after few minutes. Getting notification from a http request using service.

JS:

App.factory('MyService' ,function($scope,$timeout){
return{
 notification:return function(callback){
      $timeout(function(){
       $http.get("notification/get").success(callback)
      },100000);


}
}); 

function Controller($scope,MyService){

 MyService.notification(function(result){
  $scope.notification =data;
 });

}

Now how can i make http request after few minutes let'say 1 minute and refresh notification scope. I tried using $timeout but things are not working fine.

like image 620
Anil Sharma Avatar asked May 08 '14 12:05

Anil Sharma


2 Answers

But i would suggest to move the $interval to the controller.

 App.factory('MyService' ,function($scope,$timeout){
  return{
    notification: function(){
        return $http.get("notification/get").success(function(response){
           return response.data;
        });          
    }
  }); 

function Controller($scope,MyService,$interval){  

   /**
   * Loads and populates the notifications
   */
   this.loadNotifications = function (){
      MyService.notification().then(function(data){
        $scope.notification =data;
      });
   });
   //Put in interval, first trigger after 10 seconds 
   var theInterval = $interval(function(){
      this.loadNotifications();
   }.bind(this), 10000);    

    $scope.$on('$destroy', function () {
        $interval.cancel(theInterval)
    });

   //invoke initialy
   this.loadNotifications();
}

This seems like a better architecture there.

Passing, resolving or rejecting promises will $digest the scope. You want to get the notifications every x milliseconds and pass them into the scope.

like image 162
Konstantin Krass Avatar answered Oct 19 '22 23:10

Konstantin Krass


You want to instantiate the timeout after it finishes. Try changing your $timeout function to something like:

var timer = $timeout( function refresh(){
    $http.get("notification/get").success(callback)
    timer = $timeout(refresh, 100000);
}, 100000);
like image 30
LBurden Avatar answered Oct 20 '22 01:10

LBurden