如何“取消观看”表达式

2024-03-22

假设我有一个带有大数组的 ng-repeat 。

当 ng-repeat 运行时,它会将该数组的每个元素添加到一个隔离的作用域中,并将数组本身包含在一个作用域中。这意味着 $digest 检查整个数组的更改,最重要的是,它检查每个单独的元素在该数组中进行更改。

See 这个笨蛋 http://plnkr.co/edit/ui7HTm?p=preview作为我正在谈论的一个例子。

在我的用例中,我从不更改数组的单个元素,因此我不需要监视它们。我只会更改整个数组,在这种情况下 ng-repeat 将重新渲染整个表。 (如果我错了请告诉我..)

在(比如说)1000 行的数组中,还有 1000 个我不需要计算的表达式。

如何在观察主数组的同时从观察者中取消注册每个元素?

也许我可以更好地控制我的 $digest 并以某种方式跳过每一行,而不是取消注册?

这个具体案例实际上是一个更普遍问题的例子。我知道$watch 返回一个“注销”函数 https://groups.google.com/d/msg/angular/UFJ3_5VZsEI/w2pXyWvmcLoJ,但是当指令注册手表时(大多数情况下),这没有帮助。


拥有一个带有大阵列的中继器,您不必观看每个项目。

您需要创建一个自定义指令,该指令接受一个参数和数组的表达式,然后在链接函数中您只需观察该数组,并且让链接函数以编程方式刷新 HTML(而不是使用ng-重复)

类似于(伪代码):

app.directive('leanRepeat', function() {
    return {
        restrict: 'E',
        scope: {
           'data' : '='
        },
        link: function(scope, elem, attr) {
           scope.$watch('data', function(value) {
              elem.empty(); //assuming jquery here.
              angular.forEach(scope.data, function(d) {
                  //write it however you're going to write it out here.
                  elem.append('<div>' + d + '</div>');
              });
           });
        }
    };
});

……这似乎是一个令人痛苦的事情。

另一种黑客方法

您也许可以循环遍历$scope.$$watchers并检查$scope.$$watchers[0].exp.exp查看它是否与您要删除的表达式匹配,然后使用简单的方法将其删除splice()称呼。这里的 PITA 是这样的东西Blah {{whatever}} Blah标签之间是表达式,甚至包括回车符。

从好的方面来说,您也许可以循环遍历 ng-repeat 的 $scope 并删除所有内容,然后显式添加您想要的手表......我不知道。

不管怎样,这看起来就像是黑客攻击。

删除 $scope.$watch 生成的观察者

您可以取消注册$watch与返回的函数$watch call:

例如,要有一个$watch只开火一次:

var unregister = $scope.$watch('whatever', function(){ 
     alert('once!');
     unregister();
});

当然,您可以随时调用取消注册函数...这只是一个示例。

结论:没有什么好方法可以完全满足您的要求

但需要考虑一件事:这值得担心吗?此外,将数千条记录分别加载到数十个 DOMElement 中真的是个好主意吗?值得深思。


编辑2(删除坏主意)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何“取消观看”表达式 的相关文章

  • 使用命名的成功/错误回调在 AngularJS 中声明一个 Promise

    我正在尝试做一些与 http 服务非常相似的事情 根据我的理解 http 返回一个 Promise 对象 使用它时 语法是 http success function data success callback error function
  • put方法中的Angularjs文件上传不起作用

    我有一个简单的待办事项应用程序 我试图在其中上传照片和单个待办事项 现在我已经创建了这个工厂函数来负责待办事项的创建 todosFactory insertTodo function todo return http post baseUr
  • 如何处理并不总是返回承诺的函数?

    处理函数并不总是返回 Promise 的情况的最佳方法是什么 我的实际代码太复杂 无法解释 但问题的本质归结为检查条件 根据它 我要么返回一个局部变量 要么需要发送一个 ajax 请求 像这样的事情 function example val
  • 如何在 AngularJS 中设置和使用 $anchorScroll 的 yOffset 属性

    我用 anchorScroll AngularJS 中的服务 效果很好 但我在顶部有一个固定的导航栏 滚动位置总是 x 像素远 现在在 anchorScroll文档 https docs angularjs org api ng servi
  • 在d3.js中将2D形状转换为3D,并根据ANGULAR中的值调整高度

    我正在使用 d3 js v6 创建以下 2D 图表表示的 3D 图表 这个圆圈中有多个正方形 每个正方形都根据值分配了一种颜色 值越大 正方形越暗 现在我想将其转换为 3D 形状 其中当值变高时 只有特定正方形的高度会增加 因此结果在某种程
  • 如何在 JSFiddle 中链接外部 json 文件?

    我有一个很长的 json 文件country json name WORLD population 6916183000 name More developed regions population 1240935000 name Less
  • 在 Braintree 中使用 AngularJS 加密信用卡详细信息

    我正在使用 Braintree 作为支付网关 但遇到了一个问题 我正在发送信用卡信息和其他用户详细信息 出于安全目的 信用卡信息必须进行加密 Braintree 对此进行了加密 包括以下内容 braintree onSubmitEncryp
  • 如何理解 Angular JS 中的控制台错误消息?有什么工具吗?

    我是 Angular JS 的新手 我的第一个问题是如何理解 Angular JS 中控制台的错误消息 我编写了这段用于匹配密码的代码片段 它在控制台上抛出错误 但它工作正常 它是有线的 我无法从这些控制台消息中理解任何内容 谁能指出我为什
  • 当您只能访问模块变量时注入模块

    假设你有一个 var app angular module Mod1 现在您需要向该模块注入其他内容 但您无法更改该行 您只能访问app多变的 所以这行不通 对吧 var mod2 angular module mod2 factory m
  • 如何在 e2e AngularJS 测试中进行文件上传?

    在我的一种观点中 我有一个文件上传控件 它支持通过拖放或单击按钮后打开的标准文件对话框上传文件 How to do this in my e2e tests1 1 Just one of the two options will be en
  • 不要在关闭时破坏 Angular Bootstrap 模式

    我正在使用 Angular Bootstrap 来显示一个模态框 呈现的模态框 here http angular ui github io bootstrap 效果完美 然而 这个 Angular 扩展的默认行为是 每当关闭然后再次打开模
  • 如何将 .env 文件变量传递给 webpack 配置?

    我是 webpack 的新手 几乎完成了所有构建部分 但现在的问题是我想将环境变量从 env 文件传递 到 webpack 配置 以便我可以通过以下方式将该变量传递到我的构建文件webpack DefinePlugin plugin 目前我
  • 在多个 angular.js 应用程序之间共享单个服务

    我正在构建一个电子商务网站 基于 shopify 并且使用多个小型 angularjs 应用程序来处理诸如快速购物车 愿望清单 过滤产品和其他一些较小项目之类的事情 我最初使用了一个大型应用程序 具有路由和所有内容 但当我没有完整的 RES
  • 401 未经授权的帖子回复

    我一直在使用 Angular 模板制作 Node js 网站 但我无法在 DB Mongo 上创建数据 这是代码 节点路由 var Property mongoose model Property var jwt require expre
  • AngularJS 无限滚动大量数据

    所以我尝试使用 AngularJS 创建一个无限滚动表 类似于 http jsfiddle net vojtajina U7Bz9 http jsfiddle net vojtajina U7Bz9 我遇到的问题是 在 jsfiddle 示
  • 角度 $location.path 不起作用

    我有一个类似的问题this one https stackoverflow com questions 11784656 angularjs location not changing the path 但不同 在这里我试图添加一个事件侦听
  • 量角器按钮单击并在新选项卡中打开页面

    我对量角器相当陌生 我正在尝试自动化一个场景 其中我单击一个按钮 它会在新选项卡中打开一个页面 然后我们需要在新页面中填充表单并提交 Issue 当我单击按钮打开新页面时 我的测试不会等待新页面加载并显示测试完成和成功消息 我正在使用该按钮
  • 如何在 AngularJS 中测试具有解析属性的控制器?

    如何测试具有解析属性的控制器 它会抛出一个错误 未知提供者 InitProvider 在测试期间 这是可以理解的 我该如何测试它 我使用路由配置中的 init 属性来加载数据 并在控制器实例化时将其传递给控制器 以便在加载数据之前路由不会更
  • 对角度“数据表”中的列进行排序

    我创建了表 table class table table striped table bordered table hover width 100 thead tr th Nannie ID th th Name th th Last n
  • 在 Angular JS 中撤消重做

    我有一个大对象排列在 rootScope 中 比如说 gt 100 个对象 每个对象又具有对象 数组的层次结构 我想使用 deepWatching watch 整个 rootScope 即将 watch 的第三个参数设置为 TRUE 但这里

随机推荐

  • Azure-runbook 中的 New-PSSession (ARM)

    对于经典门户 ASM 中的 Azure VM 我能够获得 所需的凭据Get AutomationPSCredential and the ConnectionURI with Connect AzureVM ps1 https galler
  • vh 单元行为不一致

    我有一个伪元素 悬停时出现 height 0 4vh 高度不会改变 只有宽度会改变 然而 由于某种原因 在某些条件下 不同伪元素的高度不同 这里的两条深色线都有height 0 4vh 我用这个小提琴来演示 但意识到这种奇怪的情况是否发生取
  • 无法获取已安装模块的绝对路径

    我遇到了一个问题 我认为这与我的 package json 或 cordova 平台的版本有关 当我尝试运行ionic state restore它返回以下输出 Attempting to restore your Ionic applic
  • HTML5代码元素-语言类

    HTML5 code 元素有一个可选的 class language 属性 https html spec whatwg org multipage semantics html the code element定义代码片段的语言 规范中的
  • 像 Uber Android 一样在地图上旋转标记和移动动画

    我正在从事一个类似于 UBER Lyft 或 OLA 的项目 家里的地图上有可用的移动汽车 我正在寻找某种图书馆 它可以让汽车像 UBER 一样顺利移动和转弯 现在 我可以使用下面的代码将汽车从一个经纬度平稳地移动到另一个纬度经度 但棘手的
  • 在 Windows CE 5 上安装我的程序

    我正在完成 Windows CE 5 的应用程序 我想知道在 CE 5 设备上安装该应用程序的最简单方法是什么 在 VS8 中点击 发布 会生成一个安装程序 但该安装程序与 CE 5 不兼容 在 Windows CE 5 上安装应用程序的简
  • 在 QThread 中启动 QTimer

    我正在尝试在特定线程中启动 QTimer 但是 计时器似乎没有执行 也没有打印任何内容 与定时器 槽或线程有关吗 main cpp include MyThread h include
  • 在设定的字符数和长度下,可以有多少个唯一的字符串?

    如果我有两个角色 a b 和长度为三 aaa aab 我如何计算我可以用它组成多少个唯一的字符串 以及数学方法是什么 它是否正确 val 1 amountCharacters 2 length 3 for i 1 i lt length i
  • bash:〜/ .bash_profile:没有这样的文件或目录[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我不断收到此错误 bash bash profile No such file or directory 这是我的 bash pr
  • 如何忽略 Snakemake 的“自上次执行以来参数已更改”?

    由于 conda 环境不活跃 工作流程的一些非常晚的作业崩溃了 现在 当我尝试使用重新运行时snakemake deploy all ignore incomplete所有作业都会从头开始重新运行 原因如下 Reason Params ha
  • 如何在c++中显示实时时间

    有人可以告诉我如何在 C 中显示实时时间吗 我的意思是 当程序运行时 您可以看到秒和 或分钟倒计时 就像挂在墙上的真实时钟一样 这就是我所拥有的 int main time t rawtime creates and object of t
  • 通过 SOCKS 代理使用 Hadoop?

    所以我们的Hadoop集群运行在一些节点上 并且只能从这些节点访问 您可以通过 SSH 连接到它们并完成您的工作 因为这很烦人 但 可以理解 没有人会尝试配置访问控制 以便某些人可以从外部使用它 我正在尝试下一个最好的方法 即使用 SSH
  • Javascript - 如何查找希伯来语?

    我正在尝试查找字符串是否以 RTL 语言 希伯来语开头 第一个字母 有任何想法吗 这将找到编码在以下内容中的希伯来字母Hebrew http www alanwood net unicode hebrew htmlUnicode 代码点范围
  • 对 numpy.c_ 文档和示例代码感到困惑

    我多次阅读有关 numpy c 的文档 但仍然感到困惑 据说 将切片对象转换为沿第二轴的串联 在下面的文档中 谁能在下面的示例中澄清什么是切片对象 什么是第二轴 我看到它们都是一维的 并且混淆了第二轴的来源 在 Windows 上使用 Py
  • PHP $_SERVER['SERVER_NAME'] 正确使用

    菜鸟问题在这里 我正在使用 php 构建一个交互式网站 并且我决定制作一个交互式菜单 嗯 我的菜单包含一个名为 menu php 的文件 我不知道为什么 但是当我点击这个链接时 它看起来像这样 http localhost mysite 本
  • SEGMENT_START("text-segment", 0x400000) 代表什么?

    我正在学习可执行二进制文件的布局 我的最终目标是分析特定可执行文件中可以重构 在其源代码中 以减少编译输出大小的内容 我一直在使用https www embeddedlated com showarticle 900 php https w
  • Django 检查相关对象是否存在错误:RelatedObjectDoesNotExist

    我有一个方法has related object在我的模型中需要检查相关对象是否存在 class Business base name models CharField max length 100 blank True null True
  • cocos2d v3 在应用程序使用过程中重新定向屏幕

    所以在 cocos2d 中 我相信我使用的是 v2 1 我这样做是为了锁定和设置方向 AppDelegate delegate AppDelegate UIApplication sharedApplication delegate con
  • 条目 Xamarin Forms PCL 上的边框半径

    有没有办法在 Xamarin 的 XAML 中的条目上设置边框半径 或者使用自定义渲染器或其他东西 到目前为止我尝试过的所有方法都没有效果 但对于我的应用程序来说 如果我有圆形边框会更好 预先感谢您的答复 PS 我查过了这个帖子 https
  • 如何“取消观看”表达式

    假设我有一个带有大数组的 ng repeat 当 ng repeat 运行时 它会将该数组的每个元素添加到一个隔离的作用域中 并将数组本身包含在一个作用域中 这意味着 digest 检查整个数组的更改 最重要的是 它检查每个单独的元素在该数