2015-11-16 23 views
23

Jak przełączyć klasę w vue.js?Vue.js toggle class on click

mam następujące:

 <th class="initial " v-on="click: myFilter"> 
      <span class="wkday">M</span> 
     </th> 


     new Vue({ 
      el: '#my-container', 

      data: {}, 

      methods: { 
      myFilter: function(){ 

       // some code to filter users 
      } 
      } 
     }) 

Kiedy klikam th Chcę zastosować active jako klasa następująco:

 <th class="initial active" v-on="click: myFilter"> 
      <span class="wkday">M</span> 
     </th> 

potrzebuje to do przełączania czyli za każdym razem jego kliknięty to musi dodaj/usuń klasę.

Jak to zrobić w vue.js?

Odpowiedz

21

można mieć aktywny klasa zależeć wartość logiczną danych:

<th 
    class="initial " 
    v-on="click: myFilter" 
    v-class="active: isActive" 
> 
    <span class="wkday">M</span> 
</th> 



    new Vue({ 
     el: '#my-container', 

     data: { 
      isActive: false 
     }, 

     methods: { 
     myFilter: function(){ 
      this.isActive = !this.isActive; 
      // some code to filter users 
     } 
     } 
    }) 
+0

znalazłem to pomocne: http://vuejs.org/guide/class-and-style.html –

+9

jakiegoś powodu 'v-class =" aktywny : isActive "' zawiesza moją aplikację, ale 'v-bind: class =" {active: isActive} "' działa dla mnie. Mam nadzieję, że jest to pomocne dla kogoś. –

+0

Mój przykład pochodzi z wersji 0.12 –

16

Ta odpowiedź właściwego dla Vue.js version 2

<th 
    class="initial " 
    v-on:click="myFilter" 
    v-bind:class="{ active: isActive }" 
> 
    <span class="wkday">M</span> 
</th> 

Reszta Odpowiedz przez Douglas jest nadal stosowane (konfigurowania nowa instancja Vue z isActive: false itd.).

Istotne docs: https://vuejs.org/v2/guide/class-and-style.html#Object-Syntax i https://vuejs.org/v2/guide/events.html#Method-Event-Handlers

+0

po kliknięciu w jednym wierszu klasa 'active' jest stosowana do wszystkich wierszy. czy robię coś źle? – Syed

+0

tutaj ten sam problem, działa to tylko wtedy, gdy w komponencie jest tylko jeden klikalny element. co jeśli komponent ma kilka klikalnych elementów? – Kokodoko

+0

Jeśli zadasz nowe pytanie, mogę na nie spojrzeć. Dzięki – NateW

2

Oprócz odpowiedzi NateW, o ile masz myślniki w css nazwy klasy, należy owinąć tej klasy wewnątrz (single) cytuje:

<th 
    class="initial " 
    v-on:click="myFilter" 
    v-bind:class="{ 'is-active' : isActive}" 
> 

<span class="wkday">M</span> 
</th> 

Zobacz this temat więcej na ten temat.

18

bez konieczności stosowania metody:

// html element 
<div id="mobile-toggle" 
v-bind:class="{ active: showMobileMenu }" 
v-on:click="showMobileMenu = !showMobileMenu"> 
</div> 

//in your vue.js app 
data: { 
    showMobileMenu: false 
} 
+1

najlepsze rozwiązanie ... – VSG24

+0

To jest najdokładniejsze rozwiązanie od Vue 2.0 – Abdul

+0

Eleganckie rozwiązanie – boctulus

Powiązane problemy