角度运行函数,然后应用
Angular run function and then apply
我正在angular中的控制器中运行一个大任务,我有一些观察程序可能会在代码执行期间触发,由于性能的提高,我不希望发生这种情况。
在代码运行时,我如何避免角度触发某些观察程序?这已经在角魔法内部处理了吗?这个问题可以用$q解决吗,或者有更好的方法来解决?
示例:
$scope.variableThatKeepsChanging = {};
function someVeryLongFuntion(){
var someVar = variableThatKeepsChanging;
(...);
}
$scope.clickedFn = function () {
//Here should start someVeryLongFuntion()
someVeryLongFuntion();
//Only now should be run the $apply() function of angular
}
//NOTE: I need the watcher to catch changes not done by someVeryLongFuntion()
$scope.$watch('variableThatKeepsChanging', function () {doSomething()});
谢谢。
您可以尝试使用0
超时将其放入$timeout
服务
$timeout(function(
someVeryLongFunction();
), 0, false);
看看$timeout
服务中的第三个参数,它不应该调用$apply()
,但之后您需要自己调用
在您的情况下,我觉得$emit
或$broadcast
更适合您,而不是观察者,因此您可以直接控制何时发送事件。
但是的,你可以解除绑定和重新绑定观察者。。。尽管切换它们是相当罕见的,并且不是一个很好的做法
具有添加观察程序的功能:
var addWatcher = function(name){
return $scope.$watch(name...)
}
如果你想观察者做某事,只需向观察者添加一个回调,它就会做某事;调用:
var mywatcher = addWatcher('scopeName');
禁用观察程序调用:
myWatcher();
类似的东西
Javascript不在parallel中运行任务,由于应用程序的角度部分也在Javascript下运行,因此您不必担心,因为在执行的函数结束之前,观察者不会被触发。
阅读更多关于Javascript事件循环以及angular$digest和$apply的信息,了解这一点。
https://docs.angularjs.org/guide/scope(与浏览器事件循环集成)
相关文章:
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- ThreeJS将画布中的文本渲染为纹理,然后应用于平面
- 在变量中保存值的最佳方法是在应用程序关闭后使用,然后使用apachecordova在android中重新启动
- 选择具有ID的父级的第一个子级以外的所有子级,然后应用操作
- AngularJS:跟踪在Web应用程序中花费的时间,然后在特定时间触发事件
- 添加表单字段,然后对其应用JS函数
- CSS在第一次点击jQuery.post提交时没有应用,然后在随后的点击中没有更新
- 如何应用 ng-注释,然后在 gulp-if 中丑化
- 使用javascript加载元素,然后应用它们javascript
- NFC RFID应用程序读取标签,然后将其存储以供以后使用
- 添加新的第一个参数,然后应用原始参数
- 如何在应用程序模板中先加载 Ember 组件,然后再加载其他所有内容
- 从应用程序加载网页,然后单击该页面上的链接
- 在Angular中,我如何删除“;选择“;从一个李开始上课,然后把它应用到一个新的李身上
- jQuery-循环通过TD宽度,然后循环通过TH并应用TD宽度
- 角度运行函数,然后应用
- 移除被点击的元素,然后应用css
- jQuery toLowerCase,然后应用大写CSS样式
- 将自变量前置到自变量,然后应用
- 检查图像是否具有标题属性,然后应用于图像选择器