栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

how many watchers are okto have
2000

解决方案:

从开始

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仍会询问每个观察者是否有更改。

指令

stop
pause
摘要:

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 : //prerwall.com/p/d_aisq/speeding-up-angularjs-s-digest-
loop

谢谢。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/594982.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号