从外部代码

时间:2017-01-17 17:44:53

标签: javascript angularjs

我有一个应用程序,它将方法(从各种角度服务)公开给在运行时加载和评估的代码。当从外角调用这些方法时,保证$ digest触发器的最佳方法是什么,考虑到它们也可以从angular中调用?我应该公开一个包含在$ scope。$ apply中的单独接口,而不是直接公开服务方法吗?

2 个答案:

答案 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对象的可能性非常难以调试