【问题标题】:AngularJS ngRepeat not respecting limitTo filterAngularJS ngRepeat不尊重limitTo过滤器
【发布时间】:2013-12-03 11:44:00
【问题描述】:

我在列表项上使用 ng-repeat 来显示可用的超市商品。这些项目使用 $http 作为 JSON 检索并存储在 $scope.items 中,并且 ng-repeat 可以正常显示所有这些项目。我的问题是这些项目中有 20 个,我想将显示的数量限制为 3。我试图使用 limitTo 过滤器无济于事。这是一个屏幕截图,显示了显示的项目,但没有限制,尽管指定了过滤器:

http://i.imgur.com/4HiSdoG.png

我的html如下:

<span class="item-choices-choice pull-left">
    <ul>
         <li ng-repeat="choice in items.0 | limitTo:3">
             <img src="{[{ choice.ImagePath }]}" class="img-rounded" /> {[{ choice.Name }]} <strong>{[{ choice.Price }]}</strong>
         </li>
    </ul>
</span>

感谢您的帮助

编辑:

我将尝试解释更多内容:我已将 {{ 重新分配给 AngularJS 中的 {[{ 否则它会与 Twig 冲突。

items 在控制器中设置为数组:

$scope.items = [];

这是我从 AJAX 请求中收到的 JSON:

http://pastebin.com/ZN6ipRKQ

此 JSON 由 $http 解释并分配给 $scope.items[0]。 AngularJS 似乎在除此之外的所有情况下都能正常工作。

【问题讨论】:

  • 我们需要更多信息。显示items.0 的结构(顺便说一句。为什么属性名称这么奇怪?)
  • @Stewie items.0 没有被 JavaScript 评估。 Angular 正在进行评估,并且它有效。构造/编写代码不是我的首选,但它确实有效:codepen.io/BrianGenisio/pen/uFqlm
  • 嗨,items 是一个数组,每个元素中包含 20 个选项。 items.0 是第一个包含相应 20 个选项的元素,items.1 会有不同的选项,以此类推。

标签: javascript angularjs


【解决方案1】:

我找到了问题。

似乎,如果您在 PHP 中对 ArrayIterator 进行 json_encode,它会将其编码为对象中的对象,而不是数组中的对象。这似乎导致 Angular 中的 limitTo (和其他)过滤器无法正常工作。

在将 ArrayIterator 转换为普通 PHP 数组并运行 json_encode 后,限制工作绝对正常。

【讨论】:

    【解决方案2】:

    您的插值语法错误。花括号之间有方括号。

    <img src="{[{ choice.ImagePath }]}" class="img-rounded" /> {[{ choice.Name }]} <strong>{[{ choice.Price }]}</strong>
    

    需要成为

    <img src="{{ choice.ImagePath }}" class="img-rounded" /> {{ choice.Name }} <strong>{{ choice.Price }}</strong>
    

    在我修复它之后,它在 this codepen 中对我有用。

    【讨论】:

    • 对不起,我应该解释一下。我使用 Twig 作为我的模板引擎,并且在 Angular 中将 {{ 重新分配给 {[{ 以避免冲突。否则项目显示正常。
    • 您从 Angular 1.2.1 发布的代码没有任何问题。你使用的是哪个版本的 Angular?
    猜你喜欢
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多