Ich habe eine ui-router
Vorlage enthält md-tabs
von denen einige Laschen statisch sind, andere sind dynamisch ng-repeat
Iterieren durch ein gegebenes Array der erstellt mit Datenmodell.md-Register: Stellgröße für md gewählten funktioniert nicht, wenn die Funktion von innen ui-Router Aufruf
Innerhalb dieser dynamisch erstellten Registerkarten gibt es drei Tasten, um die folgenden
- bewegen Registerkarte um eine Position
- bewegt Tab rechts um eine Position
Die move tab
Tasten rufen eine Funktion noch zu tun im selben Controller. Der $index
Wert der aktuell angezeigten Tabs sowie die gewünschte Richtung (-1
für Linkslauf, 1
für Rechtslauf) werden an die Funktion übergeben.
So sieht das HTML-Snippet für die Ansicht wie folgt:
<md-content flex layout-padding>
<md-card>
<md-tabs md-dynamic-height md-border-bottom md-autoselect md-swipe-content md-selected="selectedTab">
<md-tab id="{{ 'tab' + $index }}" data-ng-repeat="tab in tabs track by $index">
<md-tab-label>Tab {{ $index + 1 }}</md-tab-label>
<md-tab-body>
<md-card-title>
<md-card-title-text>
<div flex layout="row">
<div flex><span class="md-headline">Tab {{ $index + 1 }}</span></div>
<div flex align="right">
<md-button ng-click="moveTab(-1, $index)">Move tab left</md-button>
<md-button ng-click="moveTab(1, $index)">Move tab right</md-button>
</div>
</div>
</md-card-title-text>
</md-card-title>
<md-card-content>
<p>This is tab {{ $index + 1 }}</p>
</md-card-content>
</md-tab-body>
</md-tab>
</md-tabs>
</md-card>
</md-content>
Die Funktion der Registerkarten bewegen in MainController
als implementiert:
$scope.moveTab = function(direction, TabIdx) {
var staticTabs = 3
var arr = $scope.tabs
var fromIdx = sectorIdx
var toIdx = tabIdx + direction
// correct `toIdx` in order to prevent index overflow for first/last array element
if (toIdx < 0) {
toIdx = arr.length - 1
} else if (toIdx > arr.length-1) {
toIdx = 0
}
else {
; // nothing to do here since `toIdx` does not need to be corrected
}
var tab = arr.splice(fromIdx, 1)[0]
arr.splice(toIdx, 0, tab)
$scope.selectedTab = staticTabs + toIdx
console.log($scope.selectedTab)
}
Nach einem Klick auf die gewünschte Schaltfläche, um eine Registerkarte zu bewegen Die Daten der entsprechenden Registerkarte werden angezeigt. Dies zeigt, dass das Array $scope.tabs
richtig funktioniert. Zusätzlich zeigt die Log-Meldung, dass auch der neue Wert für korrekt berechnet wird. Die neue Registerkarte ist jedoch in der Ansicht nicht ausgewählt.
Das verwirrt mich daher beide Variablen $scope.tabs
und sind in der gleichen Steuerung definiert und sollte Teil der gleichen $scope
Instanz sein. Zusätzlich wird das manipulierte $scope.tabs
Array in anderen Ansichten verwendet und zeigt die Tabdaten in der neuen Reihenfolge an, während der neue Wert für nicht verfügbar zu sein scheint und die angezeigte Registerkarte sich nicht ändert.
Wenn Sie hier durch eine Suche wie ich, mehr Informationen in der (verwandten von vielleicht nicht doppelt) Frage https://stackoverflow.com/questions/34936155/change-index-of-angular-md-tabs- erhalten have-no-effect-at-all –