W mojej aplikacji Angular mam karty md, których dyrektywa wybrana przez md jest powiązana z właściwością w moim kontrolerze. Chciałbym zmienić bieżącą kartę na tę, której indeks jest ustawiony przez funkcję wywoływaną przez ng-click w innym miejscu w moim szablonie.Zmiana indeksu Angular md-tabs nie ma żadnego efektu
zrobiłem to w ten sposób:
<div ng-controller="TrackingCtrl" layout-fill>
<md-content ng-if="isSmart" layout-fill>
<md-tabs md-selected="selectedIndex" layout-fill>
<md-tab>.........</md-tab>
<md-tab>.........</md-tab>
<md-tab>.........</md-tab>
<md-tab>
<md-tab-label>{{ 'tracking.positions.TITLE' | translate }}</md-tab-label>
<md-tab-body>
<md-tab-content layout-fill flex>
<button ng-click="map.panTo(getPosition());displayMap();"></button>
</md-tab-body>
</md-tab>
</md-tabs>
</md-content>
</div>
W moim kontroler mam:
$scope.selectedIndex = 0;
$scope.displayMap = function() {
$scope.selectedIndex = 1;
};
Ale to nie ma znaczenia w ogóle, gdy klikam przycisk, który wywołuje mój displayMap();
Mam sprawdzony problem:
- Kiedy ustawić $ scope.selectedIndex = 1; w moim kontrolera, zakładka domyślna to ten, którego indeks jest 1. OK
- Kiedy ustawić MD-selected = „1” w moim szablonu, zakładka domyślna to ten, którego indeks jest 1. OK
- Po ustawieniu punktu przerwania w moim kodzie, a po kliknięciu przycisku wywoływana jest metoda displayMap() i $ scope.selectedIndex = 1; jest wykonywany. OK
Wydaje wszystko działa dobrze ... z wyjątkiem karta nie zmienia.
biegnę kątowy Materiał 1.0.2
I nawet używany $ zastosować, aby wymusić aktualizację (bez efektu):
$scope.selectedIndex = 0;
$scope.displayMap = function() {
$timeout(function() {
if (!$scope.$$phase) {
$scope.$apply(function() {
$scope.selectedIndex = 1;
});
}
});
};
FYI - $ limit czasu sam wywoła $ stosować wewnętrznie. Nie odpowiada na pytanie ... wystarczy przekazać informacje – charlietfl
Zasugeruj również sprawdzenie trackera zagadkowego github-materiału kątowego. Wiele problemów z kartami – charlietfl
Tak, sprawdzę to. – Ben