2013-10-05 57 views
3

方法1

scope.tasks.pop(task); 
scope.$apply(); 

方法2

scope.$apply(scope.tasks.pop(task)); 

方法3

scope.$apply(function() 
{ 
    scope.tasks.pop(task); 
}); 

我的結果似乎是在所有情況下是相同的。我瞭解,修改「正常」角度以外的範圍時,必須致電$apply,以便在數據綁定中找到更改。但是我不明白$ apply的各種形式,以及爲什麼你可以不帶任何參數地調用它,而不是在傳遞給$ apply的函數中進行範圍修改。

有什麼區別,你應該什麼時候使用哪個?

回答

3

爲了更好地理解差異,請考慮爲$以下僞代碼角文檔http://docs.angularjs.org/api/ng.$rootScope.Scope

function $apply(expr) { 
    try { 
    return $eval(expr); 
    } catch (e) { 
    $exceptionHandler(e); 
    } finally { 
    $root.$digest(); 
    } 
} 

應用功能,當您使用功能或表達的字符串作爲參數調用它,角度可以處理引發的錯誤該功能正常工作並將它們轉發給$ exceptionHandler服務。在任何情況下,它都會調用$ digest()來最終更新綁定。

+0

哦,好的。所以它對消化的東西沒有任何影響,只要有任何錯誤通過$ exceptionHandler報告。我想這是有道理的。謝謝。 – CHS