Bạn có thể sử dụng mã sau để tạo menu con mở rộng/thu gọn trên AngularJS.
Tôi đã đính kèm JSFiddle ví dụ cho bạn.
<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>
khiển JS của bạn:
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"}
]
}
];
};
UPDATE:
Tôi đã cập nhật bài của tôi do nhận xét của bạn về, rằng khi chúng ta click vào mục menu mới, trước đó nên được thu gọn.
Thay đổi nhỏ trong mã.
Mới JSFiddle với nhu cầu của bạn.
<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>
Bạn JS điều khiển:
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
];
};
Nguồn
2014-10-26 09:04:16
Hi Artyom, tôi đang cố gắng để có menulist của tôi với các menu phụ có chức năng như menu trên trang web tôi gọi. Khi bạn bấm vào một liên kết menu, danh sách dưới nó sẽ mở rộng, nếu bạn bấm vào một phần tử mới, menu con cũ đóng và menu phụ mới sẽ mở rộng. =) – Bent