Estoy tratando de encontrar una manera de expandir y colapsar usando angular js. No he podido encontrar una forma elegante de hacerlo sin manipular objetos dom en el controlador (que no es la forma angular). Actualmente tengo una buena manera de hacerlo para expandir y colapsar una capa. Sin embargo, cuando empiezo a anidar, las cosas se vuelven complicadas y no funcionan del modo que yo quiero (expandir y colapsar varias áreas cuando no deberían). El problema viene cuando no sé cómo enviar un identificador único con un ng-click para expandir/contraer solo el contenido correcto. Debo mencionar que estos elementos están en una repetición ng, así que puedo personalizar necesariamente los parámetros que se envían.Expandir y contraer con js angular
Pude usar este jsfiddle para ayudarme a expandir y colapsar una capa para que funcione. Sin embargo, esta es una forma de alternar para hacerlo y quiero que el usuario pueda mantener las cosas expandidas mientras expande otras. Entonces, lo que hice para arreglar esto fue usar una matriz de y cada vez que se hace clic en algo, el índice del elemento en el que se hizo clic se agregaría a la matriz y la clase se expandiría. Cuando el usuario hizo clic de nuevo, el índice se eliminó de la matriz y el área se colapsó.
Otra forma en que descubrí que puedes hacerlo es mediante el uso de directivas. Pero no puedo encontrar ningún ejemplo para entender cómo funcionan las directivas. No estoy seguro de cómo comenzar cuando se trata de escribir directivas.
Mi configuración actual es la siguiente:
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>
El problema con esta configuración es que si tengo que divs padres ampliado y los dos tienen algo debajo de ellos para ampliar, haga clic en el expanda texto se expandirá en Ambas áreas, ya que no son únicas.
Podría poner un ejemplo de esto en plunker? Entonces podría ayudarte con una directiva. use esto como base: http://plnkr.co/edit/gist:3662656 –