angular jsを使用して展開と折りたたみを行う方法を見つけようとしています。コントローラーでdomオブジェクトを操作せずにこれを行うエレガントな方法を見つけることができませんでした(これは角度のある方法ではありません)。現在、1つのレイヤーの展開と折りたたみを行うための良い方法があります。ただし、ネストを開始すると、物事が複雑になり、思いどおりに機能しません (複数の領域を展開して折りたたむ必要がない場合)。問題は、正しいコンテンツのみを展開/折りたたむために ng-click で一意の識別子を送信する方法がわからないことです。これらのアイテムは ng-repeat に含まれているため、送信されるパラメーターを必然的にカスタマイズできることに注意してください。
このjsfiddleを使用して、1つのレイヤーの展開と折りたたみを機能させることができました。ただし、これはトグルの方法であり、ユーザーが他のものを拡張しながら拡張したままにできるようにしたいと考えています。これを修正するために私がしたことは、配列を使用することでした。何かがクリックされるたびに、そのクリックされた項目のインデックスが配列に追加され、クラスが展開されます。ユーザーがもう一度クリックすると、インデックスが配列から削除され、領域が折りたたまれました。
私が見つけた別の方法は、ディレクティブを使用することです。しかし、ディレクティブがどのように機能するかについて頭を悩ませるための例を実際に見つけることができません。ディレクティブの作成に関しては、どのように開始すればよいかさえわかりません。
私の現在のセットアップは次のとおりです。
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 を親にする必要があり、それらの両方の下に展開するものがある場合、展開テキストをクリックすると、それらが一意ではないため、両方の領域で展開されることです。