【问题标题】:Angular: What's wrong with this directive?Angular:这个指令有什么问题?
【发布时间】:2014-04-28 04:24:20
【问题描述】:

基本上,我想在指令中使用来自重复的过滤列表,如下所示:

  <tr ng-repeat="emp in (filteredList = (data.employees | filter:searchString))">
  ...

  <ms-pager items="filteredList" skip-items="skipItems"></ms-pager>

我创建了一个 plunker here 来说明问题。当您输入搜索字符串时,例如J,过滤器工作正常,但出现以下错误:

错误:[$rootScope:infdig] 达到 10 个 $digest() 迭代。中止!

正如我所想,这是因为我将过滤列表传递给了我的 ms-pager 指令。如果我不使用此指令,一切正常。那么,这是指令中的错误,还是指令中的限制,还是我的代码错误?

请注意,该指令有效,只是让我感到困扰的是浏览器控制台中出现了如此多的错误。

【问题讨论】:

  • 我预感您的digest() 问题是由于filteredListng-repeat 中的分配。尽管如此,我还是破解了一个替代解决方案,您在控制器中观看searchString,然后使用$filter 在控制器内部进行过滤,而不是ng-repeat 表达式。给你 - plnkr.co/edit/sSgtQQEqyU1HrWTlzKj3?p=preview
  • 非常感谢您提出的解决方法。实际上,我已经找到了解决方法,但是这个问题确实困扰着我,因为我怀疑我在其他地方也遇到过类似的问题(请参阅我在 stackoverflow.com/questions/22341668/… 上的另一个问题)并且我想看看是否有适当的解决方法。

标签: angularjs filter directive


【解决方案1】:

试着去掉周围的 ()

data.employees | filter:searchString

(filteredList = data.employees | filter:searchString)

here

我还注意到您没有将任何数据传递到“skipItems”

【讨论】:

  • 去掉括号会改变指令的功能:它不再显示filteredList的长度。这是指令的要点。
  • 我错过了,让我再看一遍。
  • 这个长度问题与您的手表未触发指令中的 item.length 对象有关。这里有两个问题。一是有10个$digest(),二是手表没有在item.length上触发。
  • 嗨,tmc,非常感谢您的努力,但这并不能解决我的问题。我真的需要将过滤列表传递给指令,因为我还需要做其他事情。这个问题中显示的指令只是一个简化版本来说明问题。另外,删除括号我看不出有什么区别。
  • 您要这样做吗?此问题解决了过滤列表(items.length)未在指令中更新的问题。 plnkr.co/edit/BJFTm9oyK4svvF3XP73f?p=preview
猜你喜欢
  • 2016-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 2018-01-25
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多