isOpen 仅对 angular ui-bootstrap 手风琴中 ng-repeat 中的第一个元素
isOpen for only first element in ng-repeat in angular ui-bootstrap accordion
我想使用 isOpen 属性,这样第一个元素将在加载时打开。但是当我用下面的代码尝试它时,它不会以预期的方式进行。它会打开第一个,但是当点击第二个时,它会关闭第一个,但会打开所有其他的。有人知道如何解决这个问题吗?
//html
<uib-accordion close-others="accordionCtrl.oneAtATime">
<uib-accordion-group ng-repeat="suffle in accordionCtrl.aContent" heading="{{suffle.title}}" is-open="accordionCtrl.status.isOpen">
{{suffle.content}}
<br>
<button ui-sref="lesson" class="btn btn-default accordionbutton">Continue</button>
</uib-accordion-group>
</uib-accordion>
//controller
angular
.module('neuralquestApp')
.controller('AccordionCtrl', AccordionCtrl);
function AccordionCtrl() {
var accordionCtrl = this;
accordionCtrl.oneAtATime = true;
accordionCtrl.aContent = [
{
title: 'Introduction',
content: 'What is a neural network?'
},
{
title: '1',
content: 'content1'
},
{
title: '2',
content: 'content2'
},
{
title: '3',
content: 'content3'
}
];
accordionCtrl.status = {
isOpen: true
};
}
您可以为每个组设置单独的 is-open
属性:
<uib-accordion-group ng-repeat="suffle in accordionCtrl.aContent" heading="{{suffle.title}}" is-open="accordionCtrl.status.isOpen[$index]">
初始化JavaScript中的数组:
var i, openArr;
accordionCtrl.status = {
isOpen: []
};
openArr = accordionCtrl.status.isOpen;
openArr[0] = true;
for (i = 1; i < accordionCtrl.aContent.length; i++) {
openArr[i] = false;
}
与 masa 提出的基本相同,但有两个小的优化:
close-others
默认为 true
并且
- 你可以使用
ng-init
来初始化值
代码:
<uib-accordion>
<uib-accordion-group ng-repeat="suffle in accordionCtrl.aContent" heading="{{suffle.title}}" is-open="suffle.isOpen" ng-init="suffle.isOpen = $first">
{{suffle.content}}
<br>
<button ui-sref="lesson" class="btn btn-default accordionbutton">Continue</button>
</uib-accordion-group>
</uib-accordion>
我在这里使用 suffle.isOpen
来存储状态,这是最方便的方式,但也可以使用任何其他索引变量。
基于提到的解决方案 here。
我想使用 isOpen 属性,这样第一个元素将在加载时打开。但是当我用下面的代码尝试它时,它不会以预期的方式进行。它会打开第一个,但是当点击第二个时,它会关闭第一个,但会打开所有其他的。有人知道如何解决这个问题吗?
//html
<uib-accordion close-others="accordionCtrl.oneAtATime">
<uib-accordion-group ng-repeat="suffle in accordionCtrl.aContent" heading="{{suffle.title}}" is-open="accordionCtrl.status.isOpen">
{{suffle.content}}
<br>
<button ui-sref="lesson" class="btn btn-default accordionbutton">Continue</button>
</uib-accordion-group>
</uib-accordion>
//controller
angular
.module('neuralquestApp')
.controller('AccordionCtrl', AccordionCtrl);
function AccordionCtrl() {
var accordionCtrl = this;
accordionCtrl.oneAtATime = true;
accordionCtrl.aContent = [
{
title: 'Introduction',
content: 'What is a neural network?'
},
{
title: '1',
content: 'content1'
},
{
title: '2',
content: 'content2'
},
{
title: '3',
content: 'content3'
}
];
accordionCtrl.status = {
isOpen: true
};
}
您可以为每个组设置单独的 is-open
属性:
<uib-accordion-group ng-repeat="suffle in accordionCtrl.aContent" heading="{{suffle.title}}" is-open="accordionCtrl.status.isOpen[$index]">
初始化JavaScript中的数组:
var i, openArr;
accordionCtrl.status = {
isOpen: []
};
openArr = accordionCtrl.status.isOpen;
openArr[0] = true;
for (i = 1; i < accordionCtrl.aContent.length; i++) {
openArr[i] = false;
}
与 masa 提出的基本相同,但有两个小的优化:
close-others
默认为true
并且- 你可以使用
ng-init
来初始化值
代码:
<uib-accordion>
<uib-accordion-group ng-repeat="suffle in accordionCtrl.aContent" heading="{{suffle.title}}" is-open="suffle.isOpen" ng-init="suffle.isOpen = $first">
{{suffle.content}}
<br>
<button ui-sref="lesson" class="btn btn-default accordionbutton">Continue</button>
</uib-accordion-group>
</uib-accordion>
我在这里使用 suffle.isOpen
来存储状态,这是最方便的方式,但也可以使用任何其他索引变量。
基于提到的解决方案 here。