我可以在没有 ng-repeat 的情况下使它工作,但是当我有元素列表时,is-Open 不起作用。
1.我应该可以一次打开一个面板(有时会打开所有面板)
2. is-Open 应该在面板打开时得到值 true
3. 如果用户在打开面板后点击面板内容列表,我应该能够获取值(类似于面板上的 is-Open )。
html
<body ng-app="myApp">
<div class="col-sm-6" ng-controller="Controller">
<div class="column-nav">
<uib-accordion close-others="oneAtATime">
<uib-accordion-group ng-repeat="group in groups" ng-scroll="group in groups" is-open="$parent.isOpen">
<uib-accordion-heading ng-model="checkTitle">
{{group.title}}
</uib-accordion-heading>
<a>{{group.content}}</a>
</uib-accordion-group>
</uib-accordion>
</div>
<div>
Panel Header Open: {{isOpen}} <br>
Panel oneAtATime: {{oneAtATime}}
</div>
</div>
</body>
应用程序.js
myApp.controller('Controller', ['$scope', function($scope) {
$scope.isOpen = false;
$scope.oneAtATime = true;
// Data
$scope.groups = [
{
title: "Dynamic Group Header - 1",
content: "Content - 1"
},
{
title: "Dynamic Group Header - 2",
content: "Content - 2"
}
];
//log
$scope.$watch('isOpen', function(){
console.log(" watch isOpen:" +$scope.isOpen);
}, true);
}]);
感谢您的帮助和建议。
最佳答案
这只是其他答案的细微变化。 (我仍然不确定你的第三个要求,或者至少你的意思是什么。)
我们改变这个:
...is-open="$parent.isOpen">
进入这个(不需要改变任何数据):
...is-open="group.isOpen" ng-click="updateOpenStatus()">
并将函数添加到 Controller 中,以设置“全局”打开状态。 (要求二)
$scope.updateOpenStatus = function(){
$scope.isOpen = $scope.groups.some(function(item){
return item.isOpen;
});
}
关于javascript - AngularJS Accordion is-open 检查与 ng 重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36070826/