2016-06-02 12 views
2

Ich versuche eine Klasse zu wechseln, wenn auf eine Schaltfläche geklickt wird. IE: Wenn die Schaltfläche "rndTotal" ausgewählt ist, wird die Klasse "selected" hinzugefügt und die anderen Schaltflächen entfernen die Klasse "selected". Ich brauche diesen Ansatz auch, um mit meinem Controller zu arbeiten, da ich, je nachdem, was ausgewählt wird, Dinge passieren lassen werde.AngularJS class toggle on buttons

Bisher habe ich:

 <div class="row optionRow" ng-init="option = 'exact'" > 
     <div class="col"> 
      <button ng-class="{selected:option=='exact'}">Exact</button> 
     </div> 
     <div class="col"> 
      <button ng-class="{selected:option=='rndTip'}">Round Tip</button> 
     </div> 
     <div class="col"> 
      <button ng-class="{selected:option=='rndTotal'}">Round Total</button> 
     </div> 
     </div> 

Der Standardwert ist ‚genau‘, aber nicht andere Funktion als das.

+0

Was ist select ($ index) zu tun? – OzW

+0

Im Moment ... nichts. Ich habe versucht, herauszufinden, was die beste Methode ist, um dann in meinem Controller zu referenzieren. – nightowl

+0

Die Frage wird nicht beantwortet, aber [diese Anweisung] (https://angular-ui.github.io/bootstrap/#/buttons) erfüllt genau das, was Sie brauchen. (Wenn Sie natürlich eine andere Abhängigkeit in Ihr Projekt aufnehmen möchten). –

Antwort

1

Das fühlt sich an wie ein Hack, aber zu erreichen, was Sie sind, nachdem Sie dies tun könnte:

<div class="row optionRow" ng-init="option = 'exact'" > 
    <div class="col"> 
     <button ng-class="{selected:option=='exact'}" ng-click="option='exact'">Exact</button> 
    </div> 
    <div class="col"> 
     <button ng-class="{selected:option=='rndTip'}" ng-click="option='rndTip'">Round Tip</button> 
    </div> 
    <div class="col"> 
     <button ng-class="{selected:option=='rndTotal'}" ng-click="option='rndTotal'">Round Total</button> 
    </div> 
</div> 

aktualisieren

Statt Modellwerte direkt in das Markup wie dies der Einstellung I würde zur Verwendung eines Controllers bewegen. Um das zu tun, dass ich folgende Änderungen vornehmen:

-Controller

.controller('myController', function() { 
    var vm = this; 
    vm.selectedOption = 'exact'; 
    vm.selectOption = function(option) { 
     vm.selectedOption = option; 
     // do anything else you may need to do when the selected option changes 
    }; 
}); 

Markup:

<div ng-controller="myController as vm"> 
    <div class="row optionRow"> 
     <div class="col"> 
      <button ng-class="{selected:vm.selectedOption==='exact'}" ng-click="vm.selectOption('exact')">Exact</button> 
     </div> 
     <div class="col"> 
      <button ng-class="{selected:vm.selectedOption==='rndTip'}" ng-click="vm.selectOption('rndTip')">Round Tip</button> 
     </div> 
     <div class="col"> 
      <button ng-class="{selected:vm.selectedOption==='rndTotal'}" ng-click="vm.selectOption('rndTotal')">Round Total</button> 
     </div> 
    </div> 
</div> 
+0

Das scheint perfekt zu funktionieren. Können Sie ELI5, warum Sie (1) denken, dass es hacky ist, und (2) warum diese Lösung sogar funktioniert? Ich bin Angular ziemlich neu, also versuche ich, den besten Weg herauszufinden. – nightowl

+0

Ich möchte Modellwerte nicht direkt im Markup so einstellen. Ich bevorzuge den Controller für solche Dinge. Ich werde meine Antwort aktualisieren, wie ich das angehen würde. – Lex

+0

Das ist perfekt. Danke für die Erklärung und die Bereitstellung Ihrer bevorzugten Methode. – nightowl