I have a vuetify v-btn-toggle
like this:
JavaScript
x
16
16
1
<v-btn-toggle
2
v-model="toggle_values"
3
dense
4
multiple
5
>
6
<v-btn value="A">
7
A
8
</v-btn>
9
<v-btn value="B">
10
B
11
</v-btn>
12
<v-btn value="C">
13
C
14
</v-btn>
15
</v-btn-toggle>
16
But the binding v-model is an array. How could I trigger individual toggled event for buttons A, B, C like this:
JavaScript
1
26
26
1
data() {
2
return { toggle_values: [] }
3
},
4
computed: {
5
stateA: {
6
get() {
7
// get A value from other place
8
},
9
set(isPressed) {
10
// do something on A value changed
11
}
12
},
13
stateB: {
14
get() {
15
},
16
set(isPressed) {
17
}
18
},
19
stateC: {
20
get() {
21
},
22
set(isPressed) {
23
}
24
},
25
}
26
Advertisement
Answer
We have to create one method to read the state of buttons and other to set the state, all operations take place in the toggle_values.
JavaScript
1
44
44
1
data() {
2
return { toggle_values: [] }
3
},
4
methods: {
5
getToggleStateIsPressed: function (value) {
6
return this.toggle_values.indexOf(value) === -1 ? false : true;
7
},
8
setToggleState: function (value, press) {
9
if (press && this.toggle_values.indexOf(value) === -1) {
10
this.toggle_values.push(value);
11
} else if (!press) {
12
this.toggle_values = this.toggle_values.filter((val) => {
13
return val != value;
14
});
15
}
16
},
17
},
18
computed: {
19
stateA: {
20
get() {
21
return this.getToggleStateIsPressed("A");
22
},
23
set(isPressed) {
24
this.setToggleState("A", isPressed);
25
},
26
},
27
stateB: {
28
get() {
29
return this.getToggleStateIsPressed("B");
30
},
31
set(isPressed) {
32
this.setToggleState("B", isPressed);
33
},
34
},
35
stateC: {
36
get() {
37
return this.getToggleStateIsPressed("C");
38
},
39
set(isPressed) {
40
this.setToggleState("C", isPressed);
41
},
42
},
43
},
44
If you want to play with the values and see they changing, add this:
JavaScript
1
8
1
Model: {{ toggle_values }} <br />
2
A is pressed {{ getToggleStateIsPressed("A") }}<br />
3
B is pressed {{ getToggleStateIsPressed("B") }}<br />
4
C is pressed {{ getToggleStateIsPressed("C") }}<br />
5
<v-btn @click="stateA = !stateA">{{ getToggleStateIsPressed("A")?'unpress':'press' }} A</v-btn>
6
<v-btn @click="stateB = !stateB">{{ getToggleStateIsPressed("B")?'unpress':'press' }} B</v-btn>
7
<v-btn @click="stateC = !stateC">{{ getToggleStateIsPressed("C")?'unpress':'press' }} C</v-btn>
8
Hope it helps! 😉