2016-08-01 49 views
2

我打算用角度js做一個郵箱,所以我有一個服務和一個管理郵件的控制器。angularjs longpolling郵件應用程序

服務

app.service('mails',['$http','$interval','$rootScope',function($http,$interval,$rootScope){ 
     var updatedData; 
     $interval(function(){ 
     return $http.post('inc/get_mails.php?user='+'<?php echo $_SESSION['user']; ?>') 
     .success(function(response){ 
      updatedData = response; 
      alert(updatedData); 
      $rootScope.$broadcast('got new mail!', { data: updatedData }); 
     }) 
     .error(function(err){console.log(err);}); 
     },1000); 
    }]); 

控制器

$scope.$on('got new mail!', function(event, args) { 
    $scope.mails = args.data; 
}); 

,但我有這個服務沒有運行,即使1時間的問題。我該怎麼辦!? :( tnx

回答

1

您的服務中的代碼未被調用,您必須注入您的服務才能運行它,但我認爲在您的服務中創建一個方法來初始化您的代碼是一種更好的做法,它更多。明確

app.factory('mails',['$http','$interval','$rootScope',function($http,$interval,$rootScope){ 

     var updatedData = []; 

     return { 
     init: init 
     } 

     function init() { 
     $interval(function(){ 
      return $http.post('inc/get_mails.php?user='+'<?php echo $_SESSION['user']; ?>') 
      .success(function(response){ 
      // check if their is a difference between this call and the last call 
      if (updatedData.length !== response.length) { 
       updatedData = response; 
       alert(updatedData); 
       $rootScope.$broadcast('got new mail!', { data: updatedData }); 
      } 
      }) 
      .error(function(err){console.log(err);}); 
     },1000); 
     } 

    }]); 

,然後如果你想運行的代碼:。

app.controller('yourCtrl', ['mails', '$scope', function(mails, $scope) { 
    mails.init(); 

    // each time you have a new mail 
    $scope.$on('got new mail!', function(event, args) { 
     $scope.mails = args.data; 
    }); 
}]); 
+0

對不起,我沒有注意到,在代碼感謝你的答案的變化,我將看看 –

+0

我剛剛更新了我的代碼使用工廠 – Gatsbill

+0

謝謝你很多蓋茨比爾,你的初始方法創造了魔法:D。現在它正在工作。 –