Вью.JS переключить класс по щелчку
как переключить класс в vue.Яш?
у меня есть следующие:
<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
}
}
})
когда я нажимаю th
Я хочу, чтобы применить active
как класс следующим образом:
<th class="initial active" v-on="click: myFilter">
<span class="wkday">M</span>
</th>
это должно переключаться, т. е. каждый раз, когда он щелкнул, ему нужно добавить / удалить класс.
как это сделать в vue.Яш?
8 ответов
активный класс может зависеть от логического значения данных:
<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
}
}
})
без необходимости метода:
// 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
}
этот ответ актуален для Vue.js version 2
<th
class="initial "
v-on:click="myFilter"
v-bind:class="{ active: isActive }"
>
<span class="wkday">M</span>
</th>
остальная часть ответа Дугласа по-прежнему применима (настройка нового экземпляра Vue с помощью isActive: false
и т. д.).
соответствующие документы:https://vuejs.org/v2/guide/class-and-style.html#Object-Syntax и https://vuejs.org/v2/guide/events.html#Method-Event-Handlers
в дополнение к ответу NateW, если у вас есть дефисы в имени класса css, вы должны обернуть этот класс в (одиночные) кавычки:
<th
class="initial "
v-on:click="myFilter"
v-bind:class="{ 'is-active' : isActive}"
>
<span class="wkday">M</span>
</th>
посмотреть этой темы на тему.
Если вам нужно больше, чем 1 класс
вы можете сделать это:
<i id="icon"
v-bind:class="{ 'fa fa-star': showStar }"
v-on:click="showStar = !showStar"
>
</i>
data: {
showStar: true
}
обратите внимание на одинарные кавычки вокруг классов!
благодаря решениям всех остальных.
этот пример использует списки: при нажатии на некоторые li он становится красным
HTML-код:
`<div id="app">
<ul>
<li @click="activate(li.id)" :class="{ active : active_el == li.id }" v-for="li in lista">{{li.texto}}</li>
</ul>
</div>`
JS:
`var app = new Vue({
el:"#app",
data:{
lista:[{"id":"1","texto":"line 1"},{"id":"2","texto":"line 2"},{"id":"3","texto":"line 3"},{"id":"4","texto":"line 4"},{"id":"5","texto":"line 5"}],
active_el:0
},
methods:{
activate:function(el){
this.active_el = el;
}
}
});`
в CSS
`ul > li:hover {
cursor:pointer;
}
.active {
color:red;
font-weight:bold;
}`
Скрипка:
у меня есть решение, которое позволяет вам проверять разные значения опоры и, следовательно, разные <th>
элементы станут активными/неактивными. Использование синтаксиса vue 2.
<th
class="initial "
@click.stop.prevent="myFilter('M')"
:class="[(activeDay == 'M' ? 'active' : '')]">
<span class="wkday">M</span>
</th>
...
<th
class="initial "
@click.stop.prevent="myFilter('T')"
:class="[(activeDay == 'T' ? 'active' : '')]">
<span class="wkday">T</span>
</th>
new Vue({
el: '#my-container',
data: {
activeDay: 'M'
},
methods: {
myFilter: function(day){
this.activeDay = day;
// some code to filter users
}
}
})
Если вам не нужно обращаться к переключателю извне элемента, этот код работает без переменной данных:
<a @click="e => e.target.classList.toggle('active')"></a>