在指令属性上使用过滤器会导致$ digest循环中的无限循环

泰勒·麦克

尝试对具有隔离范围的指令使用过滤器:

<div tags="p.tags | refTags"></div>

在$ digest循环中导致无限循环:

当应用程序的模型变得不稳定并且每个$ digest周期触发状态更改和随后的$ digest周期时,就会发生此错误。Angular会检测到这种情况,并防止无限循环导致浏览器无响应。

.directive 'tags', ->
    restrict: 'A'
    scope:
        tags: '='
    templateUrl: 'partials/tags.html'


.filter 'refTags', ->
    (tags) ->
        ['a filtered', 'array of values']

partials / tags.html

<ul>
    <li ng-repeat="tag in tags">{{tag.tag}}</li>
</ul>

控制器中的p.tags

p.tags = ['HTML5', 'CSS', 'JavaScript', 'Angular JS', 'Backbone JS', 'Node JS', 'SASS + Compass', 'Oragami', 'Running', 'Cat Food', '#catfood']

这是正常现象吗?

  1. 不能在传入指令的隔离范围的值上使用过滤器吗?
  2. 有没有解决方法?我需要过滤数组值
  3. 是否有其他设计不同的解决方案?
马克西姆·肖斯汀(Maxim Shoustin)

我认为这不是指令性问题,而是过滤器问题。过滤器的目标是获取一个数组作为输入,并根据一些规则和条件返回另一个数组,其中数组项的结构与输入相同。

在$ digest循环中导致无限循环的原因是,在过滤器中,每个摘要循环过滤器返回一个不同的对象,从而导致一个附加循环。

我建议您首先返回相同的数组,即input = output检查是否所有工作都按预期方式进行。之后添加相关条件。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用?时的无限循环:“ for”循环中的条件

使用 QTimer 在无限循环中运行函数

while 循环中的 Promise 不会运行 - 导致无限循环

在while循环中释放内存会不断陷入无限循环

为什么GCC -O3在std :: deque上使用过滤器迭代器会导致无限std :: distance?

在asyncio事件循环中在主线程上运行无限循环

错误:AngularJS中$ locationChangeStart上的$ rootScope:infdig无限$ digest循环

在 v-for 循环中使用 v-autocomplete 会导致无限循环

为什么带有过滤器管道的 ngFor 会导致无限循环?

使用Eclipse CDT在无限循环中获取堆栈跟踪

如何在无限循环中使用更少的堆空间?

在无限循环中使用ajax的fullCalendar viewRender

使用python在无限循环中连接到套接字

使用过滤器而不是地图执行循环

如何使用过滤器进行双循环?

Python过滤器在if循环中输出?

for循环中的Python过滤器功能

For 循环中的 Javascript 过滤器函数

嵌套在While循环中的Case语句在BASH脚本中导致无限循环

使用过滤器和映射而不是过滤器和循环的更智能方式

导致无限摘要循环的指令

while循环无限运行。使用计时器无法在while循环中终止

在循环中使用正则表达式时,应用程序进入无限循环

我继续在我的 for 循环中使用嵌套 if 获得无限循环

如何在for循环中使用insert()而不使其成为无限循环?

在for和while循环中使用计数的C ++哨兵。陷入无限循环

在while循环中使用try catch语句时无限循环catch函数

Django 在 For 循环中的过滤器中使用变量

useEffect导致无限循环