我试图找到一种方法来使用AngularJS进行展开和折叠。我还没有找到一种优雅的方法来完成这项工作,而不需要在控制器中操作DOM对象(这不是Angular的方法)。
目前我有一个很好的方法来做一个层展开和折叠。但是当我开始嵌套时,事情变得复杂了,并且没有按照我想要的方式工作(展开和折叠多个区域,当它们不应该的时候)。
问题是我不知道如何发送一个唯一的标识符与ng-click只展开/折叠正确的内容。我应该提一下,这些项目是在一个ng-repeat,所以我必须自定义参数发送。
我可以使用这个jsfiddle来帮助我得到一个层展开和折叠的工作。然而这是一个切换的方式来做它,我希望用户能够保持东西展开,同时展开其他的东西。所以我所做的修复这个问题是使用一个数组,每次点击某个东西,点击的项目的索引将被添加到数组和类展开。当使用者再次按一下时,索引会从数组中移除,且区域会收合。
另一种方法是使用指令。但是我找不到任何例子来解释指令是如何工作的。我甚至不知道如何开始编写指令。
我目前的设定如下:
function Dexspander($scope) {
$scope.ExpandArray = [];
//Push or pop necessary elements for tracking
$scope.DespopulatArray = function (identifier, element) {
if (_.indexOf($scope.ExpandArray, identifier + element) != -1) {
$scope.ExpandArray.splice(_.indexOf($scope.ExpandArray, identifier + element), 1);
} else {
$scope.ExpandArray.push(identifier + element);
}
}
//Change class of necessary elements
$scope.Dexspand = function (identifier, element) {
if (_.indexOf($scope.ExpandArray, identifier + element) != -1) {
return "expand";
} else {
return "collapse";
}
}
}
<div class="user-header" ng-repeat="user in users">
<h1 ng-click="DespopulatArray('user', $index)">Expand</h1>
</div>
<div class="user-content" ng:class="Dexspand('user', $index)">
<div class="content">
<div class="user-information">
<div class="info-header">
<h1 ng-click="DespopulatArray('info', $index)>Some Information</h1>
</div>
<div class="info-contents" ng:class="Dexspand('info', $index)">
stuff stuff stuff stuff...
</div>
</div>
</div>
</div>
这个设置的问题是,如果我必须将div扩展为父级,并且这两个div下都有要扩展的内容,则单击扩展文本将在这两个区域中扩展它们,因为它们不是唯一的。
6条答案
按热度按时间vxbzzdmp1#
您可以在html中完全解决这个问题:
这也适用于ng-repeat,因为它将为每个成员创建一个本地作用域。
请注意,即使repeat有自己的作用域,最初它也会从超级作用域继承collapse的值。这允许您在一个位置设置初始值,但可能会令人惊讶。
当然,您可以重新设置复选框的样式。
更新的fiddle:http://jsfiddle.net/azD5m/374/原始的fiddle使用结束
</input>
标签来添加HTML文本标签,而不是使用<label>
标签。cyvaqqii2#
问题来了,我不知道如何发送一个唯一的标识符与ng-click只展开/折叠正确的内容。
您可以使用ng-click传递
$event
(ng-dblclick和ng- mouse事件),然后您就可以判断是哪个元素造成事件:控制器:
另请参阅http://angular-ui.github.com/bootstrap/#/accordion
hsvhsicv3#
请访问http://angular-ui.github.io/bootstrap/#/collapse
pengsaosao4#
我刚刚用ng-show,ng-click和ng-init写了一个简单的zippy/collapsable,它只实现了一个层次,但可以很容易地扩展到多个层次。
为ng-show分配一个布尔变量,并在单击标题时切换它。
快来看看
rwqw0loc5#
这里有一个简单而容易的解决方案,在Angular JS使用ng-repeat,可能会有所帮助。
第一个
这应该能满足你的要求。这是一个工作代码。
活塞连杆http://plnkr.co/edit/n5DZxluYHi8FI3OmzFq2?p=preview
Github:https://github.com/deepakkoirala/SimpleAngularCollapse
uurity8g6#
HTML格式
在角