当前位置: 首页 > 面试题库 >

如何展开/折叠Angular中的所有行

米裕
2023-03-14
问题内容

我已经成功创建了一个函数来切换我的各个行ng-table以使用以下方式打开和关闭:

TestCase.prototype.toggle = function() {
  this.showMe = !this.showMe;
}

<tr ng-repeat="row in $data">

  <td align="left">
    <p ng-click="row.toggle();">{{row.description}}</p>

    <div ng-show="row.showMe">

有关更多代码,请参见plunkr。请注意,“菜单”中的展开/折叠按钮。

但是,我现在想不出一种方法来打开和关闭所有行。我希望能够以某种方式在行上运行for循环,然后在需要时调用toggle,但是我这样做的尝试失败了。在下面看到它们:

TestCase.prototype.expandAllAttemptOne = function() {
   for (var row in this) {
     if (!row.showMe)
     row.showMe = !row.showMe;
   }
}

function expandAllAttemptOneTwo(data) {
   for (var i in data) {
     if (!data[i].showMe) 
     data[i].showMe = !data[i].showMe;
   }
 }

关于如何正确切换所有行的任何想法?


问题答案:

将该ng-show指令与ng-clickng-init指令结合使用,我们可以执行以下操作:

<div ng-controller="TableController">
  <button ng-click="setVisible(true)">Show All</button>
  <button ng-click="setVisible(false)">Hide All</button>
  <ul>
    <li ng-repeat="person in persons" 
        ng-click="person.visible = !person.visible" 
        ng-show="person.visible">
    {{person.name}} 
    </li>
  </ul>
</div>

我们的控制器可能如下所示:

myApp.controller('TableController', function ($scope) {

  $scope.persons = [
    { name: "John", visible : true}, 
    { name: "Jill", visible : true}, 
    { name: "Sue", visible : true}, 
    { name: "Jackson", visible : true}
    ];

  $scope.setVisible = function (visible) {
    angular.forEach($scope.persons, function (person) {
      person.visible = visible;
    });
  }
});

我们在这里做两件事。首先,我们的控制器包含一个person对象数组。这些对象每个都有一个名为的属性visible。我们将使用它来打开和关闭项目。其次,我们在名为的控制器中定义一个函数setVisible。这将使用布尔值作为参数,并将遍历整个persons数组并将每个person对象的visible属性设置为该值。

现在,在我们的html中,我们使用了三个angular指令;ng-clickng-repeatng- show。看来您已经有点知道这些是如何工作的,所以我只想解释一下我对它们的处理方式。在我们的html中,我们用于ng- click为“全部显示”和“全部隐藏”按钮设置点击事件处理程序。单击其中任何一个将导致setVisible调用true或false值。这将用于切换所有列表项的全部打开或全部关闭。

接下来,在ng- repeat指令中,我们提供了一个angular表达式,用于单击列表项时进行评估。在这种情况下,我们告诉angular切换person.visible到当前的相反值。这将有效地隐藏列表项。最后,我们有了我们的ng- show指令,该指令与我们的visible属性一起简单地用于确定是否呈现特定的列表项。

这是一个带有工作示例的plnkr:http
://plnkr.co/edit/MlxyvfDo0jZVTkK0gman?p=preview

该代码是您可能会做的一般示例,您应该可以对其进行扩展以适合您的特定需求。希望对您有所帮助!



 类似资料:
  • 需求:a-collapse 可以一键展开所有 使用 javascript+vue3+Ant Design Vue 下了下面的代码: 点击"展开全部"之后就报错了:

  • 我正在使用Netbeans 7.2开发JavaFX2.2应用程序。我正在使用一个treeview,我扩展了TreeCell,为每个TreeItem提供一个上下文菜单,其中有一个MenuItem具有“collpase all”功能。treeview的最大深度级别为4。当用户右键单击级别2的TreeItem并单击“全部折叠”MenuItem时,我想使级别3的所有TreeItem折叠(setExpand

  • 我有一个带有多个视图保持器的RecyclerView适配器。每个ViewHolder都有一个标题TextView和一个嵌套的RecyclerView,工作正常。但我想实现一个扩展/折叠函数,这样嵌套的RecyclerView就可以隐藏,直到单击标题为止。我使用此方法RecyclerView展开/折叠项目。它可以工作,但当我单击标题以展开嵌套的RecyleView时,recyclerview不会填充

  • 有没有办法在Visual Studio代码中折叠/扩展大量函数选择(javascript代码)?

  • 问题内容: 我尝试使用以下条件创建折叠并展开侧面菜单- 页面加载时,第一项(圆形)将处于展开视图中。一个项目可以一次扩展,例如,如果用户单击第二个项目(“规范”),则第一个项目将折叠。我还希望在收起/展开交易过程中使用一些CSS动画,例如平稳地向下/向上调整每个项目的主体部分并更改箭头图标。我的方法是动态地在每个项目()上添加/删除CSS类,例如- 因此,当一个项目处于展开视图时,它应类似于上一类

  • 问题内容: 我有一个带JSplitPane的JFrame,它是OneTouchExpandable。我想记住JSplitPane在JFrame上的最后一个Divider位置,如果重新打开JFrame,则恢复该位置。 它工作正常,但是如果用户通过oneTouchExpandable UI- Widget展开一侧,则我仅将’int’-Position放置在dispose上,然后再次将’int’-Pos