我正在尝试找出一种使用 Angular js 进行扩展和折叠的方法。如果不操纵控制器中的 dom 对象(这不是角度方式),我无法找到一种优雅的方式来做到这一点。目前我有一个很好的方法来做一层展开和折叠。但是,当我开始嵌套时,事情变得复杂并且无法按照我想要的方式工作(在不应该的情况下扩展和折叠多个区域)。问题来自我不知道如何通过 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 并且它们下方都有要扩展的内容,则单击扩展文本将在两个区域中扩展它们,因为它们不是唯一的。