【问题标题】:Angular directive with ng-repeat, ng-show "Show more" and lazy-load带有 ng-repeat、ng-show “显示更多”和延迟加载的 Angular 指令
【发布时间】:2017-04-08 00:53:25
【问题描述】:

我使用这个指令,遍历数组“myArr”,过滤一些条件。

<myDirective 
    myData='item' 
    ng-repeat="item in filteredArr = (myArr | filter:searchField | filter:checkboxFilter)" 
    ng-show="$index < visible" 
/>

这给了我两个我想得到一些意见的问题:

a) ng-show 部分在那里,因为我有一个条件来处理这个:

<p>
    <a ng-click='visible=visible+10' ng-show='visible < filteredArr.length'>Show more</a>
</p>

为了显示或隐藏“显示更多”部分。我想不出另一个关于切换这个和/或项目本身的想法。 $scope.visible 在控制器内部设置为 10,一旦我们开始。我不能使用limitTo,因为它不能让我确定是否还有更多要显示的内容,因为它当然会将数组“切碎”到设定的限制。

b) 在指令内部,模板打印一个

<img ng-src="..."> 

标签。只要这些图像未显示在上述结构中,我该如何防止它们加载?

提前非常感谢!

【问题讨论】:

    标签: javascript angularjs directive ng-repeat


    【解决方案1】:

    使用ng-if 而不是ng-show

    ng-show 不同,falsey ng-if 从 DOM 中删除元素。

    编辑:

    此外,事实上,您还可以使用limitTo 过滤器,这将使您的代码更加简洁:

    <div ng-init="limit = 2">
      <foo ng-repeat="item in items | limitTo: limit as results"></foo>
    </div>
    <button ng-hide="results.length === items.length" 
            ng-click="limit = limit +2">show more...</button>
    

    plunker

    【讨论】:

    • 哇,马上解决了,谢谢!尽管我没有问(因为我假设一个解决方案以某种方式运行一个我可以自己控制每个项目的功能),但我有一点想法是我确实想要加载的不仅是可见的,而且是“可见加下 10 个”项目的图像。
    • 然后使用ng-showng-if的组合(或limitTo: limitToLoadng-show="$index &lt; limitToLoad-10"的组合)
    • 我看到你在上面编辑了你的答案。我检查了 plunker,但是一旦到达(过滤的)数组的末尾,按钮就不会消失。
    • 更新了插件和答案
    • 不幸的是还没有 - 记得我有一些(自定义)过滤器,例如搜索框和复选框?有点像,plnkr.co/edit/qkDEcMe77bz1h3ZmTtTH?p=preview
    猜你喜欢
    • 2014-10-26
    • 2023-03-05
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多