如何通过单击按钮从内部关闭 uib-accordion
How to close uib-accordion from inside with a button click
我想通过单击按钮从内部关闭手风琴。我试图将 isOpen
设置为 false 但它不起作用。有没有办法在单击按钮时关闭它?谢谢。
笨蛋在这里:https://plnkr.co/edit/3xMnWRPOoEHPmguaQxd0?p=preview
<div uib-accordion-group is-open="isOpen" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
{{group.content}}
<button ng-click="close()">close this</button>
</div>
$scope.groups = [
{
title: 'Dynamic Group Header - 1',
content: 'Dynamic Group Body - 1'
},
{
title: 'Dynamic Group Header - 2',
content: 'Dynamic Group Body - 2'
}
];
$scope.isOpen = false;
$scope.close = function(){
$scope.isOpen = false;
}
显示手风琴时必须将$scope.isOpen
设置为true
,然后$scope.isOpen = false
将关闭手风琴。
编辑:
有个笨蛋
https://plnkr.co/edit/RbbbwGaqGq8gG0JYseYw?p=preview
我将 isOpen 放入集合中,以便为每个手风琴药丸单独切换(使每个药丸单独切换)并且它有效,检查下面的代码:
控制器:
$scope.groups = [
{
title: 'Dynamic Group Header - 1',
content: 'Dynamic Group Body - 1',
isOpen: false
},
{
title: 'Dynamic Group Header - 2',
content: 'Dynamic Group Body - 2',
isOpen: false
}
];
$scope.items = ['Item 1', 'Item 2', 'Item 3'];
$scope.addItem = function() {
var newItemNo = $scope.items.length + 1;
$scope.items.push('Item ' + newItemNo);
};
$scope.close = function(group){
group.isOpen = false;
};
查看:
<div uib-accordion-group is-open="group.isOpen" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
{{group.content}}
<button ng-click="close(group)">close this</button>
</div>
我修改了你的plunker:
https://plnkr.co/edit/pBT0fbNJtQhgc5kZlLbO?p=preview
您可以在使用 ng-repeat
循环时使用 ng-init
分配新属性 isOpen
。已更新 Plunker code。
更改模板而不在控制器中添加属性:
<div uib-accordion-group ng-init="group.isOpen=false" is-open="group.isOpen" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
{{group.content}}
<button ng-click="group.isOpen=false">close this</button>
</div>
编辑:
如果您不想更改现有对象,那么您可以使用数组 isOpen
来保持手风琴组的打开状态。 Plunker code.
<uib-accordion close-others="oneAtATime" ng-init="isOpen=[]">
<div uib-accordion-group ng-init="isOpen[$index]=false" is-open="isOpen[$index]" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
{{group.content}}
<button ng-click="isOpen[$index]=false">close this</button>
</div>
</uib-accordion>
我可以通过稍微更改@MrNobody 解决方案来实现我所需要的。 https://plnkr.co/edit/cYb5jIi3LBslUDO8xfg4?p=preview
查看:
<uib-accordion close-others="true">
<div uib-accordion-group is-open="isOpen[$index]" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
{{group.content}}
<button ng-click="close($index)">close this</button>
</div>
</uib-accordion>
<button ng-click="closeFromOutside()">close from outside</button>
控制器:
$scope.isOpen = [];
$scope.groups = [
{
title: 'Dynamic Group Header - 1',
content: 'Dynamic Group Body - 1'
},
{
title: 'Dynamic Group Header - 2',
content: 'Dynamic Group Body - 2'
}
];
$scope.close = function(index){
$scope.isOpen[index] = false;
}
$scope.closeFromOutside = function(){
$scope.isOpen = [];
}
我想通过单击按钮从内部关闭手风琴。我试图将 isOpen
设置为 false 但它不起作用。有没有办法在单击按钮时关闭它?谢谢。
笨蛋在这里:https://plnkr.co/edit/3xMnWRPOoEHPmguaQxd0?p=preview
<div uib-accordion-group is-open="isOpen" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
{{group.content}}
<button ng-click="close()">close this</button>
</div>
$scope.groups = [
{
title: 'Dynamic Group Header - 1',
content: 'Dynamic Group Body - 1'
},
{
title: 'Dynamic Group Header - 2',
content: 'Dynamic Group Body - 2'
}
];
$scope.isOpen = false;
$scope.close = function(){
$scope.isOpen = false;
}
显示手风琴时必须将$scope.isOpen
设置为true
,然后$scope.isOpen = false
将关闭手风琴。
编辑: 有个笨蛋 https://plnkr.co/edit/RbbbwGaqGq8gG0JYseYw?p=preview
我将 isOpen 放入集合中,以便为每个手风琴药丸单独切换(使每个药丸单独切换)并且它有效,检查下面的代码:
控制器:
$scope.groups = [
{
title: 'Dynamic Group Header - 1',
content: 'Dynamic Group Body - 1',
isOpen: false
},
{
title: 'Dynamic Group Header - 2',
content: 'Dynamic Group Body - 2',
isOpen: false
}
];
$scope.items = ['Item 1', 'Item 2', 'Item 3'];
$scope.addItem = function() {
var newItemNo = $scope.items.length + 1;
$scope.items.push('Item ' + newItemNo);
};
$scope.close = function(group){
group.isOpen = false;
};
查看:
<div uib-accordion-group is-open="group.isOpen" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
{{group.content}}
<button ng-click="close(group)">close this</button>
</div>
我修改了你的plunker: https://plnkr.co/edit/pBT0fbNJtQhgc5kZlLbO?p=preview
您可以在使用 ng-repeat
循环时使用 ng-init
分配新属性 isOpen
。已更新 Plunker code。
更改模板而不在控制器中添加属性:
<div uib-accordion-group ng-init="group.isOpen=false" is-open="group.isOpen" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
{{group.content}}
<button ng-click="group.isOpen=false">close this</button>
</div>
编辑:
如果您不想更改现有对象,那么您可以使用数组 isOpen
来保持手风琴组的打开状态。 Plunker code.
<uib-accordion close-others="oneAtATime" ng-init="isOpen=[]">
<div uib-accordion-group ng-init="isOpen[$index]=false" is-open="isOpen[$index]" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
{{group.content}}
<button ng-click="isOpen[$index]=false">close this</button>
</div>
</uib-accordion>
我可以通过稍微更改@MrNobody 解决方案来实现我所需要的。 https://plnkr.co/edit/cYb5jIi3LBslUDO8xfg4?p=preview
查看:
<uib-accordion close-others="true">
<div uib-accordion-group is-open="isOpen[$index]" class="panel-default" heading="{{group.title}}" ng-repeat="group in groups">
{{group.content}}
<button ng-click="close($index)">close this</button>
</div>
</uib-accordion>
<button ng-click="closeFromOutside()">close from outside</button>
控制器:
$scope.isOpen = [];
$scope.groups = [
{
title: 'Dynamic Group Header - 1',
content: 'Dynamic Group Body - 1'
},
{
title: 'Dynamic Group Header - 2',
content: 'Dynamic Group Body - 2'
}
];
$scope.close = function(index){
$scope.isOpen[index] = false;
}
$scope.closeFromOutside = function(){
$scope.isOpen = [];
}