Vue
by arzo
HTML
<div id="app">
<h2>Todos:</h2>
<select multiple v-model="selectedUnis">
<option v-for="(uni, uniName) in universe" @click="refresh">{{uniName}}</option>
</select>
<ol v-for="(todos, idx) in universe" v-if="selectedUnis.indexOf(idx)!==-1">
<li v-for="todo in todos">
<label>
<input type="checkbox"
v-on:change="toggle(todo)"
v-bind:checked="todo.done">
<del v-if="todo.done">
{{ todo.text }}
</del>
<span v-else>
{{ todo.text }}
</span>
<div v-for="m in todo.meta">
{{m}}
</div>
<button @click="add(todo)">+</button>
</label>
</li>
</ol>
</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: {
selectedUnis: [],
/*
universe2: {
'todos': [
{ text: "Learn JavaScript", done: false },
{ text: "Learn Vue", done: false },
{ text: "Play around in JSFiddle", done: true },
{ text: "Build something awesome", done: true }
],
'subverse': [
{text: 'subvrse1', done: 0},
{text: 'subvrse2', done: 1}
]
}
*/
},
methods: {
toggle: function(todo){
todo.done = !todo.done
},
add(todo) {
Vue.set(todo, 'meta', todo.meta || [])
todo.meta.push({name: "123"})
},
refresh(idx) {
Vue.set(this, 'universe', todo.universe || {})
}
},
computed: {
universe() {
return {
'todos': [
{ text: "Learn JavaScript", done: false },
{ text: "Learn Vue", done: false },
{ text: "Play around in JSFiddle", done: true },
{ text: "Build something awesome", done: true }
],
'subverse': [
{text: 'subvrse1', done: 0},
{text: 'subvrse2', done: 1}
]
}
}
}
})