2014-03-28 32 views
1

我已經看過,並沒有能夠找到如何處理在AngularJS中的基本彗星驗證概念。我正在研究客戶端通過重複Ajax調用實現的Comet,而不是流式JavaScript。你怎麼寫「你好,世界!」對於AngularJS中的Comet?

如果我有一個服務器端的CGI:

#!/bin/bash 
echo "Content-type: application/json" 
echo "" 
echo "'"Hello world at "`/bin/date`"'!'"'" 

什麼是準系統AngularJS的概念,將查詢服務器每一秒,和模網絡延遲之類的證據,顯示「你好世界!」包括服務器時間?

+0

不知道你的「模網絡延遲和喜歡」的意思是,你只是在尋找如何使從角的異步調用的例子嗎? – shaunhusain

+0

重複異步調用,是的。在真實的網絡中,網絡延遲和其他條件可能會導致應用程序的行爲顯示服務器時間;我基本上試圖說,「忽略其他細微差別,如何編寫一個會消耗CGI腳本輸出並顯示服務器時間的AngularJS Comet?」 – JonathanHayward

回答

0

的Plunkr

http://plnkr.co/edit/6kpLplq5hy9e2sXMaEsG?p=preview

的HTML

<!DOCTYPE html> 
<html> 

    <head> 
    <script data-require="[email protected]*" data-semver="1.2.15" src="http://code.angularjs.org/1.2.15/angular.js"></script> 
    <link rel="stylesheet" href="style.css" /> 
    <script src="script.js"></script> 
    </head> 

    <body ng-app="myApp" ng-controller="MyCtrl"> 
    {{data.theDate}} 
    </body> 

</html> 

的JS

angular.module("myApp", []).service("UpdatingService", function($http, $timeout){ 
    var service = { 
    data:{}, 

    getData:function(){ 
     $http.get("someData.json").success(function(result){ 
     angular.copy(result, service.data) 
     service.data.theDate+=" "+new Date(); 
     }); 
    } 
    }; 

    cancelRefresh = $timeout(function myFunction() { 
     service.getData(); 
     cancelRefresh = $timeout(myFunction, 1000); 
    },1000); 


    return service; 
}).controller("MyCtrl", function($scope, UpdatingService){ 
    $scope.data = UpdatingService.data; 
}); 

所以我告訴我怎麼會一般做這個上面。首先創建一個處理請求和存儲數據的服務。然後製造一個控制器並注入所述服務。在服務內部從角度注入$ http和$ timeout服務,這樣我們就可以創建ajax請求並重復請求,從而輪詢服務器。由於沒有真正的setInterval,$ timeout回調會創建一個新的$ timeout來繼續週期,如果您需要在下面的鏈接中的某些點詳細信息處停止計時器,則可以使用cancelRefresh。

using setInterval in angularjs factory