将自定义元素添加到 ngRepeat 列表

Posted

技术标签:

【中文标题】将自定义元素添加到 ngRepeat 列表【英文标题】:adding custom element to ngRepeat list 【发布时间】:2016-05-26 23:59:18 【问题描述】:

我正在使用 cordova + onsenui + angularJs 开发一个移动应用程序,并且对填充 ngRepeat 列表有特殊要求。

有些项目可能有额外的参数。在这种情况下,我想显示项目的附加信息(完全用新的替代模式)

或在下面附加一个新的自定义项。

到目前为止,我只学习了如何使用一种模式填充列表项(所有项的参数相同,html 相同)。如何进行更改以使带有参数“type = u”的项目具有自定义模式? (例如按钮和文本框)

我的代码: HTML

<ons-page ng-controller="FiltersController">
            <ons-list>
                <ons-list-item modifier="tappable" ng-repeat="item in items">
                    <label class="checkbox checkbox--list-item">
                        <input type="checkbox" ng-model="item.selected">
                        <div class="checkbox__checkmark checkbox--list-item__checkmark"></div>
                        <ons-icon icon="fa-comment" size="20px"></ons-icon>
                        item.name
                    </label>
                </ons-list-item>
            </ons-list>
        </ons-page>

JS:

app.controller('FiltersController', function ($scope, $timeout) 
    function FiltersController($scope) 
        $scope.items = 
            item1:  name: "Hamburgar", selected: false ,
            item2:  name: "Pasta", selected: false ,
            // for next item ideally I need to either:
            // change how the 'repeat' element looks like
            // or append new element between 'item3' and 'item4'
            item3:  name: "Potato", selected: false, type: "u" ,
            //
            item4:  name: "Makaroni", selected: false ,
            item5:  name: "Veg", selected: false 
        ;
    

    FiltersController($scope);
, 1000);

附:加载控制器后,我不需要对列表进行任何更改。所以也许这会更容易实现.. 之后不会删除或添加其他元素(但当然用户将使用 ngRepeat 生成的列表中的复选框和按钮)。

【问题讨论】:

【参考方案1】:

您可以通过将ng-if 语句添加到您只希望在ng-repeat 中的项目具有某些特征时出现在DOM 中的HTML 元素来实现所需的结果。例如:

<ons-list-item modifier="tappable" ng-repeat="item in items">
    <label class="checkbox checkbox--list-item">
        <input type="checkbox" ng-model="item.selected">
    </label>
    <button ng-if="item.name=='Potato'">This button will only appear for item3</button>
</ons-list-item>

在上面的例子中,button 只有在 item.namePotato 时才会出现在 DOM 中。

【讨论】:

完美运行!虽然最后我使用了switch 语句,因为ng-if 没有ng-else 条件......在switch 情况下 - 可以设置默认行为(即else)。 好东西 - 很高兴能提供帮助

以上是关于将自定义元素添加到 ngRepeat 列表的主要内容,如果未能解决你的问题,请参考以下文章

php 将自定义列添加到“事件日历后端列表”

Rails 路由:将自定义路由添加到标准操作列表

Angular:将自定义管道添加到addControl()元素

将自定义列产品可见性添加到 Woocommerce 3 中的管理产品列表

将自定义标记 (HTMLMarkers) 添加到聚类

是否可以将自定义交互式 UI 元素添加到 EditText?