【问题标题】:(AngularJS) Make a "ng-show" true specifically for one element in a ng-repeat(AngularJS) 为 ng-repeat 中的一个元素设置“ng-show”
【发布时间】:2017-07-25 23:11:13
【问题描述】:

我从 Angular 开始,我想问是否有可能为“ng-repeat”中的一个元素设置“ng-show”为真,而为其他元素设置为假?

我用这段代码解释自己:

html 文件:

      <tbody ng-repeat="elem in List"  ng-init="visible = false">
                    <tr ng-class="elemSelected(elem)">
                        <td colspan="3">
                            <a href ng-click="clickElemScroll(Elem)"   >
                            <span class="glyphicon" ng-class="visible? 'glyphicon-chevron-down' : 'glyphicon-chevron-right'"></span>
                            <strong>{{elem.name}} </strong>
                            </a>
                        </td>
                    </tr>
                    <tr ng-show="visible" >
                      blabla
                    </tr>
</tbody>

js 文件:

  $scope.clickElemScroll = function (elem) {
                    if ($scope.elemSelected === elem) {
                        $scope.visible = true
                    } 
                };

如你所知,问题是所有元素都将被滚动,如何只使我点击的元素可见?

【问题讨论】:

    标签: angularjs angularjs-ng-repeat ng-show


    【解决方案1】:

    您可以在元素上设置一个新属性以在 ngRepeat 中使用。另外,不确定 ng-class 发生了什么,但我不建议在其中使用函数。如果您在选择时尝试设置课程,请尝试ng-class="{'selected': elem.selected}"

      <tbody ng-repeat="elem in List">
            <tr ng-class="elemSelected(elem)">
                 <td colspan="3">
                      <a href ng-click="elem.selected = !elem.selected">
                         <span class="glyphicon" ng-class="visible? 'glyphicon-chevron-down' : 'glyphicon-chevron-right'"></span>
                            <strong>{{elem.name}} </strong>
                      </a>
                 </td>
            </tr>
            <tr ng-show="elem.selected">
                 blabla
            </tr>
    

    【讨论】:

    • 您好,非常感谢您的回答,它有效! :) 现在我有第二个问题,当我点击一个元素时,是否可以关闭其他元素(!elem.selected for all elem)(只有这个必须打开,所以等于 true ?
    • 我有第二个问题,当我点击一个元素(只有这个必须打开)时,是否可以关闭其他元素(!elem.selected 为除选定的所有元素之外的所有元素)?
    • 这将是一个有点不同的实现。您需要使 ng-click 一个函数并执行一个 for 循环来遍历每个 elem 并将其设置为未选中或选中。在 ngRepeat 中,您可以使用 $index 在元素内的任何位置获取项目的当前索引。因此,如果您想关闭其他的,您的 ng-click 将类似于 ng-click="setSelected($index)" 并且您的控制器将定义该功能。在函数中对 List 执行 for 循环并执行类似 List[i].selected = (i === $index); 的操作
    • 另外,对于未来需要帮助的人,请接受我的回答
    • 终于解决了我的问题: $scope.setSelected = function(elem,index) { elem.selected = !elem.selected; for (var i=0;i
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多