2013-12-18 59 views
0

AngularJS超級新手,請耐心等待:)AngularJS重繪問題? Chrome只有

我們正在使用它在我們處理存儲庫(以及之後)時輪詢我們的API以進行更新。在一個特定的頁面上,數據被加載但沒有畫到屏幕上。突出顯示內容或調整瀏覽器大小會導致重繪並顯示剛纔不存在的所有角度值!最新的Chrome!

只看:一切從「0」或「 - 」開始,但突出顯示頁面顯示「優化圖像」和「文件大小節省」內容更改。

活生生的例子:
可能需要點擊刷新有ANGULAR DRAW失敗

需要安裝Chrome〜版本31.0.1650.63米 它適用於Firefox的!?! http://crusher.io/repo/alhertz/didthesaintswin/63f49d36e709dea172fe7e4bbacbcfd834f9a642

這似乎是非常相似的這個問題,但沒有嵌套控制器的問題,我可以檢測:Update page contents after GET request in AngularJS

當我嘗試添加$scope.$apply()我得到這個錯誤:http://docs.angularjs.org/error/$rootScope:inprog?p0=$apply

這是在角度控制器(CoffeeScript的)相關的代碼:

do poll = -> 
    $http.get("#{$location.absUrl()}/poll.json").success((data, status, headers, config) -> 
     if $scope.continuePolling 
     #console.log("still polling #{$location.absUrl()}") 
     $scope.data = data 
     $scope.TotalOptimizedImage = $scope.CalcTotalOptimizedImage(data.images) 
     $scope.TotalImgSize = $scope.CalcTotalImgSize(data.images) 
     $scope.SavedImgSize = $scope.CalcSavedImgSize(data.images) 
     $scope.TotalSavings = ($scope.TotalImgSize - $scope.SavedImgSize + 0) 
     $timeout(poll, 10000) 
    ) 

真的不知道如何突破這個分開定影。思考?

+0

你可以嘗試在jsfiddle中重新創建問題嗎?那麼協助會更容易。 – Beyers

+0

@gantman,下面的答案是否幫助您解決問題? – lucuma

+0

不,它沒有:(這仍然是一個問題,但我有一個解決方法。 – GantMan

回答

0

看起來你需要在http.get的回調裏面調用$scope.apply。原因是回調會在控制器摘要之外發生。對不起,我不擅長咖啡腳本,但這樣的事情:

$http.get("#{$location.absUrl()}/poll.json").success((data, status, headers, config) 
    if $scope.continuePolling 
    $scope.$apply(function() { // wrap the stuff you want to update in the $scope.$apply 
    #console.log("still polling #{$location.absUrl()}") 
    $scope.data = data 
    $scope.TotalOptimizedImage = $scope.CalcTotalOptimizedImage(data.images) 
    $scope.TotalImgSize = $scope.CalcTotalImgSize(data.images) 
    $scope.SavedImgSize = $scope.CalcSavedImgSize(data.images) 
    $scope.TotalSavings = ($scope.TotalImgSize - $scope.SavedImgSize + 0) 
    }); 
    $timeout(poll, 10000) 
) 

我會建議你使用一個safeApply功能,並有很大的timeFunctions服務,可以幫助你與我挺有用的輪詢成功地在幾個項目中。你可以在這個answer找到它。