【问题标题】:Variable set in ng-repeat not being created未创建在 ng-repeat 中设置的变量
【发布时间】:2014-10-13 14:03:26
【问题描述】:

this关于如何确定过滤掉的元素数量的问题之后,我创建了以下角度代码:

<input type="text" ng-model="query" placeholder="Enter query...">
<div ng-if="filteredData.length!=data.length"> Showing {{filteredData.length}} of {{data.length}}</div>
<div ng-repeat="datum in filteredData = (data | orderBy: 'name' : reverse | filter:query)"> 
    ....
</div>

但是,由于某种原因,filteredData 从未真正被设置,Showing of 10 总是出现。我使用this 回答来获取我的控制器的范围变量,但filteredData 并没有出现在那里,尽管所有其他变量都出现了。

另外值得注意的是:重复工作的内容很好,只是没有设置filteredData

【问题讨论】:

  • 请看这里jsbin.com/xuyuy/3/edit我已经使用了你的代码,一切看起来都很好。控制台有什么错误吗?
  • @sss 我发现了这个问题。这是因为我的ng-repeat 被包裹在ng-if 中,而其余代码则没有。但是,ng-if 始终评估为 true,所以我不知道为什么 ng-if 会导致问题。

标签: javascript html angularjs angularjs-ng-repeat


【解决方案1】:

我相信这是因为您试图在 ng-repeat 中设置过滤数据。

您可能应该将filteredData 设置为控制器中的一组过滤数据。这样你就只是在你的重复语句中循环。

<div ng-repeat="datum in filteredData | orderBy: 'name' : reverse | filter:query"> 
    ....
</div>

同样值得注意的是,ng-repeat 中的角度过滤器不会编辑数组的长度。因此,如果您的代码确实有效,filteredData.length 不会改变。

【讨论】:

  • 角度过滤器并不是要改变数组长度,而是要创建一个子集并将其分配给一个新数组filteredData,它的长度会更小。这曾经有效,但现在由于某种原因它停止了工作。在控制器之外由内而外地做应该没关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 2023-03-30
  • 2014-12-12
  • 2015-07-20
  • 2013-07-23
  • 1970-01-01
相关资源
最近更新 更多