我有一个应用程序,它将方法(从各种角度服务)公开给在运行时加载和评估的代码。当从外角调用这些方法时,保证$ digest触发器的最佳方法是什么,考虑到它们也可以从angular中调用?我应该公开一个包含在$ scope。$ apply中的单独接口,而不是直接公开服务方法吗?
答案 0 :(得分:0)
没有时间调用$ timeout()函数。
例如
function someEventOutsideAngualer(value) {
$timeout(function(){
$scope.bindedValue = value;
})
}
这个想法是当执行$ timeout回调时,在我们的情况下,它会被下一个$ digest选中。请不要使用$ scope。$ apply()和$ digest触发器。如果没有正确理解,它们会导致比解决更多的问题
答案 1 :(得分:0)
快速解决方案是调用$ evalAsync。来自文档:
“如果在$ digest循环之外调用此函数,将安排新的$ digest循环。”https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope
我建议在Angular之外暴露一些东西是暴露元素(通过提供ID或选择器)你有范围或(更好)控制器附加,然后使用'angular.element(someDomEkenent).scope()。someFunction()'
在这种情况下,您将避免捕获可导致内存泄漏的unessesary对象的可能性非常难以调试