如何在angularjs中手动停止摘要循环

苏尼尔·加尔格(Sunil Garg)

在摘要循环中,对变量进行脏检查,即是否有100个范围变量,并且如果我更改一个变量,则它将监视所有变量。

假设我有100个彼此独立的范围模型变量。如果我对一个变量进行了更改,那么我不想检查所有其他99个变量。有什么办法吗?如果是,怎么办?

罗希特·金达尔(Rohit Jindal)

令人惊讶的是,这通常不是问题,即使具有数千个绑定,浏览器也不会出现问题,除非表达式很复杂。常见的答案how many watchers are ok to have2000

解决方案:

从开始AngularJS 1.3这是相当容易的,因为one-time绑定现在处于核心地位。

  1. 一次绑定变量。

我们可以使用一次绑定(::)指令来防止观察者观察到不需要的变量。在这里,变量将仅被监视一次,之后将不更新该变量。

  1. 手动停止摘要循环。

HTML:

<ul ng-controller="myCtrl">
  <li ng-repeat="item in Lists">{{lots of bindings}}</li>
</ul>

控制器代码:

app.controller('myCtrl', function ($scope, $element) {
  $element.on('scroll', function () {
    $scope.Lists = getVisibleElements();
    $scope.$digest();
  });
});

在期间$digest,您仅对Lists对象的更改感兴趣,而对单个项目的更改不感兴趣但是,Angular仍会询问每个观察者是否有更改。

指令stoppause摘要:

app.directive('stopDigest', function () {
  return {
    link: function (scope) {
      var watchers;

      scope.$on('stop', function () {
        watchers = scope.$$watchers;
        scope.$$watchers = [];
      });

      scope.$on('resume', function () {
        if (watchers)
          scope.$$watchers = watchers;
      });
    }
  };
});

现在,应该更改控制器代码:

<ul ng-controller="listCtrl">
  <li stop-digest ng-repeat="item in visibleList">{{lots of bindings}}</li>
</ul>

app.controller('myCtrl', function ($scope, $element) {
  $element.on('scroll', function () {
    $scope.visibleList = getVisibleElements();

    $scope.$broadcast('stop');
    $scope.$digest();
    $scope.$broadcast('resume');
  });
});

参考文档: https : //coderwall.com/p/d_aisq/speeding-up-angularjs-s-digest-loop

谢谢。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在swagger nestjs中手动添加摘要和正文

来自分类Dev

如何在Windows 10中手动停止Python程序?

来自分类Dev

如何在angularjs中从控制器手动注入部分

来自分类Dev

如何在SSRS中手动删除订阅?

来自分类Dev

如何在MVC 6中手动验证模型

来自分类Dev

如何在C中手动迭代堆栈帧?

来自分类Dev

如何在PySide中手动触发aboutToQuit信号

来自分类Dev

如何在Android Studio中手动运行Proguard?

来自分类Dev

如何在ReactJS中手动设置输入值?

来自分类Dev

如何在Python中手动创建稀疏矩阵

来自分类Dev

如何在自制软件中手动安装zenity?

来自分类Dev

如何在Magento中手动更新库存数量

来自分类Dev

如何在iOS钥匙串中手动存储?

来自分类Dev

如何在Visual C ++中手动处理名称?

来自分类Dev

如何在RabbitMQ中手动提取队列数据?

来自分类Dev

如何在Symfony中手动管理CRSV令牌?

来自分类Dev

如何在JOOQ中手动创建RecordN的实例?

来自分类Dev

如何在Solr中手动合并线段?

来自分类Dev

如何在WPF中手动触发RelayCommand?

来自分类Dev

如何在Rails中手动插入分页符?

来自分类Dev

如何在Eclipse中手动安装WTP?

来自分类Dev

如何在SwiftUI中手动显示contextMenu?

来自分类Dev

如何在python中手动处理图像

来自分类Dev

如何在SAS EG中手动输入数据

来自分类Dev

如何在Django中手动禁用Cookie

来自分类Dev

如何在IntelliJ中手动下载ClojureDocs for Cursive?

来自分类Dev

如何在Android中手动暂停活动?

来自分类Dev

如何在自制软件中手动安装zenity?

来自分类Dev

如何在jqgrid中手动触发onclicksubmit事件?