2013-07-12 36 views
1

我有一個簡單的函數,將數據加載到{{my_content}}。問題是,我想在{{my_content}}已更新後執行jQuery腳本myJqueryFunction()。下面的代碼工作除了myJqueryFunction()似乎之前被調用(或根本沒有?){{my_content}}已被更新。有什麼建議麼?如何在模型數據更新後調用jQuery函數?

$scope.showContent = function(){ 
    $http({ 
     url: "my/url", 
     method: "POST" 
    }) 
    .success(function (data, status, headers, config) { 
     $scope.my_content = data; 
     myJqueryFunction(); 
    }) 
    .error(function (data, status, headers, config) { $scope.status = status; }); 
}; 
+2

沒有理由,只要成功處理程序觸發,這將無法正常工作。如果你可以讓一個Plunkr或JSFiddle來顯示這個問題,我會看看,但我看到沒有理由,每次成功處理程序觸發時都不會調用該函數。 – shaunhusain

+0

我認爲它被稱爲,但它需要在''{{my_content}}''已被更新後調用。我如何確保只有在更新了「{{my_content}}」後纔會調用它? –

+0

我在$ scope中找到了一篇很好的文章。$ apply()這個解釋比我知道它的工作原理還要多一點:http://jimhoskins.com/2012/12/17/angularjs-and-apply.html但是它真的取決於你期望jQuery函數能夠做什麼來響應角度變化。例如,如果它正在讀取由瀏覽器計算出的信息,那麼該數據可能不會被更新,您可能需要改爲使用$ timeout作爲建議,這與javascript中的setTimeout一樣,但也調用$ scope。$ apply automatically(或者監聽關於正在應用的CSS的特定瀏覽器事件等) – shaunhusain

回答

1

您可以使用$timeout來保證在後續的應用摘要循環中執行此功能。

$timeout(function() { 
    myJqueryFunction(); 
}) 

更新:當然你必須注入$timeout到控制器,加入$timeout到控制器的參數(也許你需要具體說明噴油器陣列中'$timeout'爲好,這取決於你所選擇的注射方法。)

相關問題