Ich habe einen Code geschrieben, um alle Tabs eines Akkordeons zu öffnen und zu schließen, bzw. benutze einen separaten 'Öffnen' und 'Schließen' Knopf. Wie auch immer, ich muss dynamisch ein Schlüsselwertpaar (einen Booleschen Wert) zu meinen JSON-Daten hinzufügen.Angularjs - UI Boostrap: Akkordeon Öffne und schließe alle
Was ist die beste Vorgehensweise in dieser Situation? sollte ich den Booleschen Wert als statisches JSON-Element hinzufügen oder ist es in Ordnung, Werte dynamisch hinzuzufügen, wenn deren einziger Zweck die visuelle Struktur und nicht die tatsächlichen Objektdaten sind?
HTML/Angular Richtlinien
<div id="app" ng-app="demoApp">
<div id="controller" ng-controller="demoAppCtrl">
<uib-accordion close-others="false">
<div class="btn-group form-group">
<button type="button" class="btn btn-warning" ng-click="toggle(true)">Open</button>
<button type="button" class="btn btn-warning" ng-click="toggle(false)">Close</button>
</div>
<uib-accordion-group is-open="hero.state" ng-click="setOpened(false)" ng-repeat="hero in heroes">
<uib-accordion-heading>
{{hero.name}}
</uib-accordion-heading>
{{hero.bio}}
</uib-accordion-group>
</uib-accordion>
</div>
</div>
Javascript/Schräg
var app = angular.module('demoApp', ['ngAnimate','ui.bootstrap']);
app.controller('demoAppCtrl', function($scope) {
// This json object contain only one entry as an example
$scope.heroes = [
{'name': 'Captain America', 'team': 'Avengers', 'bio': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum vitae metus placerat, condimentum nisl et, accumsan sapien. Quisque molestie magna nulla, id malesuada sem interdum a.'}
];
$scope.addDefaultState = function(val) {
for (var i=0;i<$scope.heroes.length;i++) {
$scope.heroes[i].state = val;
}
}
$scope.addDefaultState(false);
$scope.toggle = function(status) {
$scope.heroes.forEach(function(e) {
e.state = status;
});
}
});
codepen.io - Working example (with corrections)
Vielen Dank für Ihre Antwort, ich bin froh, dass Sie mir in Bezug auf die JSON-Daten zustimmen. Nachdem Sie gesagt haben, dass Sie mit der '.addDefaultState()' Funktion richtig sind. Es war unnötig und löscht das Problem der JSON-Daten vollständig. Eine Frage jedoch, sollte ich den Wert "hero.state" behalten oder durch einen einfachen "false" Wert ersetzen? EDIT: Das Ändern von 'is-open' zu' is-open = false' funktioniert nicht. –
Ja, Sie müssen den Status "hero.state" beibehalten, da die Toggle-Funktion "true/false" auf das Statusmodell setzt. Das is-open verwendet dieses Modell. –