首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从外部代码触发$digest

从外部代码触发$digest
EN

Stack Overflow用户
提问于 2017-01-17 17:44:53
回答 2查看 244关注 0票数 0

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-17 17:50:34

没有时间调用$timeout()函数。

例如

代码语言:javascript
复制
function someEventOutsideAngualer(value) {

  $timeout(function(){
    $scope.bindedValue = value;
  })
}

我们的想法是,在执行$timeout回调时,在我们的示例中,它将与下一个$digest一起获取。请不要使用$scope.$apply()和$digest触发器。他们造成的问题比他们解决的更多,如果没有得到正确的理解的话。

票数 -1
EN

Stack Overflow用户

发布于 2017-01-18 17:03:53

快速解决方案是调用$evalAsync。来自文件:

“如果此函数是在$digest循环之外调用的,则将调度一个新的$digest循环。”https://docs.angularjs.org/api/ng/type/$rootScope.Scope。

我关于暴露角度外的东西的建议是公开元素(通过提供ID或选择器),在其中附加范围或(更好的)控制器,然后使用'angular.element(someDomEkenent).scope().someFunction()‘。

在这种情况下,您将避免捕获不必要的对象,这些对象可能导致很难调试的内存泄漏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41703670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档