Vue
by Murat Kezli
HTML
<div id="app">
<h2>Roles:</h2>
<ol>
<li v-for="role in roles">
<label>
<input type="checkbox"
v-on:change="toggle(role)"
v-bind:checked="role.enabled">
<span>
{{ role.text }}
</span>
</label>
</li>
</ol>
<button @click="selectAll">Select all</button>
<pre>{{ roles }}</pre>
<h3>Selected:</h3>
<pre>{{ selectedRoles }}</pre>
</div>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
li {
margin: 8px 0;
}
h2 {
font-weight: bold;
margin-bottom: 15px;
}
del {
color: rgba(0, 0, 0, 0.3);
}
Vue
new Vue({
el: "#app",
data: {
roles: [
{ text: "Admin", enabled: 1 },
{ text: "Moderator", enabled: false },
{ text: "User", enabled: false },
{ text: "Pleb", enabled: true }
],
},
computed: {
selectedRoles () {
return this.roles.filter(el => el.enabled)
}
},
methods: {
toggle (role) {
role.enabled = !role.enabled
},
selectAll () {
this.roles.forEach(el => el.enabled = true)
}
}
})