Ich habe eine übergeordnete Komponente, die "n" untergeordnete Komponenten innerhalb einer ng-Wiederholung erstellt. Jede untergeordnete Komponente hat in ihrer Vorlage ein Akkordeon-Element (aus ui-bootstrap-Direktiven).
Von der übergeordneten Komponente möchte ich alle Akkordeons mithilfe einer Verknüpfung in der übergeordneten Komponentenebene reduzieren oder erweitern. Jedes Kind-Akkordeon kann einzeln erweitert/reduziert werden, indem die lokale vm.isAccordionExpanded
Variable eingestellt wird.
Ich plane, $scope.$broadcast()
Formular der Eltern zu verwenden, um die Kinder zu benachrichtigen, jeder von ihnen wird die Ereignisse mit $scope.$on()
abfangen und eine lokale boolesche Variable vm.isAccordionExpanded
setzen, um das Akkordeon zu öffnen/zu schließen.AngularJS 1.5 - Eigenschaft der untergeordneten Komponenten Iterieren und festlegen
Geordnete Komponente Vorlage:
<span id="accordionListCommands" ng-if="vm.pastVisits.totalResults > 0">
<span id="collapseAllAccordion">
<a ng-click="vm.collapseAll()" href="">
<i class="fa fa-minus-square" aria-hidden="true"></i></a>
</span>
<span id="expandAllAccordion">
<a ng-click="vm.expandAll()" href="">
<i class="fa fa-plus-square" aria-hidden="true"></i></a>
</span>
</span>
<div ng-repeat="visitItem in vm.pastVisits.data">
<visits-list-component visit="visitItem"></visits-list-component>
</div>
Geordnete Komponente js-Datei:
$scope.$on('collapse-all-accordion', function() {
vm.isAccordionExpanded = false;
});
$scope.$on('expand-all-accordion', function() {
vm.isAccordionExpanded = true;
});
Vorlage Kind:
<uib-accordion close-others="false">
<div uib-accordion-group is-open="vm.isAccordionExpanded">
//Rest of the template
Gibt es einen besseren oder mehr performant Weg, dies zu erreichen?
Sieht nach einem guten Weg aus. Verwenden Sie immer 'track by' in ng-repeat, um die Leistung zu erhöhen. Sie können auch 'is-open =" vm.isAccordionExpanded || allExpanded "' verwenden und die letztere Variable auf "true" setzen, um alle zu erweitern. – Charleshaa
Vielen Dank für die Erinnerung an Track bz Index, ich habe die Antwort bearbeitet, um zu zeigen, wie ich die Variable vm.isAccordionExpanded setze, wenn die Ereignisse ausgelöst werden. Ich denke, die Logik reicht aus, ohne allexpanded Variable hinzuzufügen, oder fehlt mir etwas? – Francesco
Ja, Ihre Logik funktioniert großartig, es ist nur so, dass Sie nicht mehrere Ereignis-Listener einrichten, sondern nur während des Digest-Zyklus. Ich bin mir nicht sicher, wie viel Leistung Sie erzielen werden. Wie auch immer, dein Code sieht gut aus für mich. – Charleshaa