2013-10-05 36 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