2016-06-02 2 views
2

Я пытаюсь переключить класс при нажатии кнопки. IE: если выбрана кнопка «rndTotal», добавлен класс «selected», а остальные кнопки будут удалены. Мне также нужен такой подход для работы с моим контроллером, так как в нем у меня будет материал, основанный на том, что выбрано.Переключатель класса AngularJS на кнопках

До сих пор у меня есть:

 <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> 

По умолчанию это значение «точным», но не работает, кроме этого.

+0

Что выбрать ($ индекс) делать? – OzW

+0

На данный момент ... ничего. Я пытался выяснить, что является лучшим методом для ссылки в моем контроллере. – nightowl

+0

Не отвечая на вопрос, но [эта директива] (https://angular-ui.github.io/bootstrap/#/buttons) делает именно то, что вам нужно. (Если вы хотите включить другую зависимость в свой проект, вне курса). –

ответ

1

Это чувствует, как взломать, но сделать то, что вы после того, как вы могли бы сделать это:

<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> 

Update

Вместо значений параметров модели непосредственно в разметке, как это, я перейдет к использованию контроллера. Для того, чтобы сделать это, я хотел бы сделать следующие изменения:

контроллера

.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

Это, кажется, работает отлично. Не могли бы вы ELI5, почему вы (1) считаете, что это взломано, и (2) почему это решение даже работает? Я довольно новичок в Angular, поэтому я пытаюсь найти лучший способ сделать что-то. – nightowl

+0

Мне не нравится устанавливать значения модели непосредственно в разметке следующим образом. Я предпочитаю использовать контроллер для таких вещей. Я обновлю свой ответ, как я подхожу к этому. – Lex

+0

Это прекрасно. Благодарим вас за объяснение и предоставим ваш предпочтительный метод. – nightowl

Смежные вопросы