AngularJS'de genişletilmiş/daraltılmış alt menü oluşturmak için aşağıdaki kodu kullanabilirsiniz.
Sizin için JSFiddle ekledim.
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="item in items" ng-click="showChilds(item)">
<span>{{item.name}}</span>
<ul>
<li ng-repeat="subItem in item.subItems" ng-show="item.active">
<span>---{{subItem.name}}</span>
</li>
</ul>
</li>
</ul>
</div>
Sizin JS kontrolörü:
function MyCtrl($scope) {
$scope.showChilds = function(item){
item.active = !item.active;
};
$scope.items = [
{
name: "Item1",
subItems: [
{name: "SubItem1"},
{name: "SubItem2"}
]
},
{
name: "Item2",
subItems: [
{name: "SubItem3"},
{name: "SubItem4"},
{name: "SubItem5"}
]
},
{
name: "Item3",
subItems: [
{name: "SubItem6"}
]
}
];
};
GÜNCELLEME: nedeniyle biz yeni menünün öğe üzerinde önceki tıkladığınızda o, yaklaşık yorumunuza Gönderimimi güncelledik
çökmüş olmalı.
Koddaki küçük değişiklikler.
İhtiyacınız olan yeni JSFiddle.
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="item in items" ng-click="showChilds($index)">
<span>{{item.name}}</span>
<ul>
<li ng-repeat="subItem in item.subItems" ng-show="item.active">
<span>---{{subItem.name}}</span>
</li>
</ul>
</li>
</ul>
</div>
JS kontrolörü:
function MyCtrl($scope) {
$scope.showChilds = function(index){
$scope.items[index].active = !$scope.items[index].active;
collapseAnother(index);
};
var collapseAnother = function(index){
for(var i=0; i<$scope.items.length; i++){
if(i!=index){
$scope.items[i].active = false;
}
}
};
$scope.items = [
// items array the same with the previous example
];
};
Merhaba Artyom, ben ben anılacaktır sitesinde menüsü gibi işleyen alt menüler ile benim menulist yaşamaya çalışıyorum. Bir menü bağlantısını tıklattığınızda, altındaki liste genişler, yeni bir öğeye tıklarsanız eski alt menü kapanır ve yeni alt menü genişler. =) – Bent