使用 ng-click 激活 ng-repeat
activate ng-repeat using ng-click
所以基本上我使用 ng-repeat 创建了这个菜单,它在数组中显示了一个 objects 的字段。
然后,当我单击其中一个显示的字段时,我想创建另一个 ng-repeat 来将其他字段推送到下方。我只想在点击时激活第二个 ng-repeat ,如果用户再次点击则撤消。意思是,ng-repeat 只会在用户点击按钮后出现。
我应该如何执行这个有什么想法吗?
<div ng-repeat="collection in library" ng-click="setCollection(collection)">
<li class="list-group-item">{{collection.Collection}}</li>
</div>
这里我有一些来自 JS 文件的代码
$scope.library = [
{
Collection: "Harry Potter",
value: false,
books: [
{
book: "Sorcerer Stone",
value: false
},
{
book: "Goblet of Fire",
value: false,
}
]
},
{
Collection: "LOTR",
value: false,
books: [
{
book: "Two Towers",
value: false
},
{
book: "Return of the King",
value: false,
}
]
}
];
$scope.setCollection = function(collection){
collection.value = !collection.value;
};
因此,如果用户单击 collection,它 ng-repeat 就是 collection 名称下方的所有书籍。
如果再次点击同一个 collection,它们都会再次隐藏。
如果在点击 collection 之后再点击一本书,我希望它将值设置为 !value。将值设置为 true 或 false 必须适用于 collections 和书籍。
谢谢:)
假设您有:
<ul ng-hide="someVariable">
<li ng-repeat="foo in bar"></li>
</ul>
然后在 ng-click 发生的任何地方执行此操作:
<button ng-click="showStuff()">Show Hidden Stuff!</button>
在你的控制器中执行此操作:
$scope.someVariable = true;
$scope.showStuff = function(){
If($scope.someVariable){
$scope.someVariable = false;
} else {
$scope.someVariable = true;
}
}
也许做这样的事情:
<div ng-controller="TestController as ctrl">
<ul class="menu">
<li ng-repeat="item in ctrl.menu.items">
<a ng-click="ctrl.openSubmenu(item)">{{item.label}}</a>
<ul class="submenu"
ng-if="item.submenuIsOpen">
<!-- Submenu content right here -->
</ul>
</li>
</ul>
</div>
// On your controller
var vm = this;
// Set the menu object with items
vm.menu = {
items: [
{
label: 'Item 1',
submenuIsOpen: false
},
{
label: 'Item 1',
submenuIsOpen: false
}
]
}
// Then create the open submenu function
vm.openSubmenu = function(item) {
item.submenuIsOpen = !item.submenuIsOpen;
}
正如@codeninja 指出的那样,您也可以使用 $scope。
我已经按照你的要求制作了一个demo,你只需要改一点代码就可以了。
var myApp = angular.module('myApp', []);
function MyCtrl($scope) {
$scope.title = 'Welcome varun';
$scope.mainMenu = [{
title: 'A',
subMenu: ['A1', 'A2'],
subMenuDisplay: false
}, {
title: 'B',
subMenu: ['B1', 'B2', 'B3'],
subMenuDisplay: false
}, {
title: 'C',
subMenu: ['C1', 'C2'],
subMenuDisplay: false
}];
$scope.toggle = function(menu) {
menu.subMenuDisplay = !menu.subMenuDisplay;
};
}
.menu {
min-width: 50px;
min-height: 30px;
background: grey;
border: 2px solid black;
cursor:pointer;
}
.subMenu {
min-width: 50px;
min-height: 30px;
background: magenta;
border: 2px solid black;
cursor:auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myApp" ng-controller="MyCtrl">
<div>
{{title}}
</div>
<div>
<div class='menu' ng-repeat='menu in mainMenu' ng-click='toggle(menu)'>
{{menu.title}}
<div class='subMenu' ng-repeat='sub in menu.subMenu' ng-show='menu.subMenuDisplay' ng-click='$event.stopPropagation()'>
{{sub}}
</div>
</div>
</div>
</body>
所以基本上我使用 ng-repeat 创建了这个菜单,它在数组中显示了一个 objects 的字段。 然后,当我单击其中一个显示的字段时,我想创建另一个 ng-repeat 来将其他字段推送到下方。我只想在点击时激活第二个 ng-repeat ,如果用户再次点击则撤消。意思是,ng-repeat 只会在用户点击按钮后出现。
我应该如何执行这个有什么想法吗?
<div ng-repeat="collection in library" ng-click="setCollection(collection)">
<li class="list-group-item">{{collection.Collection}}</li>
</div>
这里我有一些来自 JS 文件的代码
$scope.library = [
{
Collection: "Harry Potter",
value: false,
books: [
{
book: "Sorcerer Stone",
value: false
},
{
book: "Goblet of Fire",
value: false,
}
]
},
{
Collection: "LOTR",
value: false,
books: [
{
book: "Two Towers",
value: false
},
{
book: "Return of the King",
value: false,
}
]
}
];
$scope.setCollection = function(collection){
collection.value = !collection.value;
};
因此,如果用户单击 collection,它 ng-repeat 就是 collection 名称下方的所有书籍。 如果再次点击同一个 collection,它们都会再次隐藏。 如果在点击 collection 之后再点击一本书,我希望它将值设置为 !value。将值设置为 true 或 false 必须适用于 collections 和书籍。
谢谢:)
假设您有:
<ul ng-hide="someVariable">
<li ng-repeat="foo in bar"></li>
</ul>
然后在 ng-click 发生的任何地方执行此操作:
<button ng-click="showStuff()">Show Hidden Stuff!</button>
在你的控制器中执行此操作:
$scope.someVariable = true;
$scope.showStuff = function(){
If($scope.someVariable){
$scope.someVariable = false;
} else {
$scope.someVariable = true;
}
}
也许做这样的事情:
<div ng-controller="TestController as ctrl">
<ul class="menu">
<li ng-repeat="item in ctrl.menu.items">
<a ng-click="ctrl.openSubmenu(item)">{{item.label}}</a>
<ul class="submenu"
ng-if="item.submenuIsOpen">
<!-- Submenu content right here -->
</ul>
</li>
</ul>
</div>
// On your controller
var vm = this;
// Set the menu object with items
vm.menu = {
items: [
{
label: 'Item 1',
submenuIsOpen: false
},
{
label: 'Item 1',
submenuIsOpen: false
}
]
}
// Then create the open submenu function
vm.openSubmenu = function(item) {
item.submenuIsOpen = !item.submenuIsOpen;
}
正如@codeninja 指出的那样,您也可以使用 $scope。
我已经按照你的要求制作了一个demo,你只需要改一点代码就可以了。
var myApp = angular.module('myApp', []);
function MyCtrl($scope) {
$scope.title = 'Welcome varun';
$scope.mainMenu = [{
title: 'A',
subMenu: ['A1', 'A2'],
subMenuDisplay: false
}, {
title: 'B',
subMenu: ['B1', 'B2', 'B3'],
subMenuDisplay: false
}, {
title: 'C',
subMenu: ['C1', 'C2'],
subMenuDisplay: false
}];
$scope.toggle = function(menu) {
menu.subMenuDisplay = !menu.subMenuDisplay;
};
}
.menu {
min-width: 50px;
min-height: 30px;
background: grey;
border: 2px solid black;
cursor:pointer;
}
.subMenu {
min-width: 50px;
min-height: 30px;
background: magenta;
border: 2px solid black;
cursor:auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myApp" ng-controller="MyCtrl">
<div>
{{title}}
</div>
<div>
<div class='menu' ng-repeat='menu in mainMenu' ng-click='toggle(menu)'>
{{menu.title}}
<div class='subMenu' ng-repeat='sub in menu.subMenu' ng-show='menu.subMenuDisplay' ng-click='$event.stopPropagation()'>
{{sub}}
</div>
</div>
</div>
</body>