Indice de changement de AngularJS md-onglets ont aucun effet
Dans mon Angulaire de l'application, j'ai un md-onglets dont le md-sélectionné directive est lié à une propriété dans mon contrôleur. Je voudrais changer l'onglet actuel à celui dont l'indice est défini par une fonction appelée par ng-cliquez ailleurs dans mon template.
J'ai fait de cette façon:
<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>
Dans mon contrôleur, j'ai :
$scope.selectedIndex = 0;
$scope.displayMap = function() {
$scope.selectedIndex = 1;
};
Mais il n'a aucun effet lorsque je clique sur mon bouton qui appelle displayMap();
J'ai inspecté le problème:
- Lorsque j'ai mis $champ d'application.selectedIndex = 1; dans mon contrôleur, l'onglet par défaut est celui dont l'indice est de 1. OK
- Lorsque j'ai mis md-selected="1" dans mon template, l'onglet par défaut est celui dont l'indice est de 1. OK
- Lorsque j'ai mis un point d'arrêt dans mon code, et quand je clique sur mon bouton, displayMap() est appelée, et de portée.selectedIndex = 1; est exécuté. OK
Il semble que tout fonctionne bien... à l'exception de l'onglet ne change pas.
Je suis en cours d'exécution Angulaire Matériel 1.0.2
J'ai même utilisé $s'appliquent pour forcer la mise à jour (aucun effet) :
$scope.selectedIndex = 0;
$scope.displayMap = function () {
$timeout(function () {
if (!$scope.$$phase) {
$scope.$apply(function () {
$scope.selectedIndex = 1;
});
}
});
};
FYI - $timeout par lui-même va déclencher $s'appliquent à l'interne . Ne pas répondre à la question ... juste de passage sur info
Proposer angulaire-matériel github issue tracker aussi. Beaucoup d'onglets questions
Oui, je vais vérifier cela
Proposer angulaire-matériel github issue tracker aussi. Beaucoup d'onglets questions
Oui, je vais vérifier cela
OriginalL'auteur Ben | 2016-01-21
Vous devez vous connecter pour publier un commentaire.
Je suis content que vous avez trouvé une solution pour votre problème. Pour éviter que le comportement d'abord, vous devriez jeter un oeil à ce stackoverflow discussion.
Depuis votre selectedIndex variable contient une primitive, chaque nouveau Champ d'application introduit - vous l'avez déjà mentionné le ngIf - détruit la liaison de données et les changements au sein de l'enfant n'aura pas d'effet sur le "dehors".
Dans votre cas, il suffit d'utiliser...
...à suivre le point de la règle.
OriginalL'auteur Moritz Herbert
J'ai résolu mon problème qui est certainement causé par un problème de portée. J'ai simplement utilisé le contrôleur syntaxe et a déclaré que tous les précédents portée de données avec:
et balisage:
Fonctionne parfaitement maintenant. Je suppose que ma ng-si est en train de modifier ma portée.
OriginalL'auteur Ben
Peut-être que j'ai mal compris quelque chose à propos de votre question, mais cela devrait fonctionner...
J'ai créé un plunker et je ne peux pas reproduire votre comportement, c'est juste fonctionne bien.
Vue:
Contrôleur:
Pourriez-vous s'il vous plaît vérifier? Espérons que cela aide
Plunker ici
Pour être honnête, je ne comprends pas pourquoi tu dis ça ne fonctionne pas...Le plunker de ma réponse est fonctionne bien. De toute façon, je suis content que vous avez résolu le problème
Désolé, ça ne fonctionne pas quand j'ai mis ton code dans mon balisage (à cause de ma portée, je pense). Bien sûr, sur Plunker c'est ok
OriginalL'auteur troig
voici ma solution:
OriginalL'auteur anarchist
Avec md-selected = 0, vous allez dans le premier onglet. Et md-selected = 1 pour le deuxième onglet.
bouton:
contrôleur:
vous testez ma proposer? J'ai angulaire du matériel d'application 1.0.0 y travailler
Cela n'a pas fonctionné, mais j'ai trouvé une solution de contournement. Voir ma réponse
OriginalL'auteur Oscar Caicedo