Vue select

by Chris Ball

HTML

<div id="vue">

  <h2>Option 1</h2> Only one can be selected
  <ul>
    <li v-for="item in items" :class="{highlight:item.id == selected}" @click="selected = item.id">{{item.id}}</li>
  </ul>

  <h2>Option 2</h2> Many can be selected, stores state on item
  <ul>
    <li v-for="item in items" :class="{highlight:item.selected}" @click="$set(item, 'selected', !item.selected)">{{item.id}}</li>
  </ul>
 
  <h2>Option 3</h2> Many can be selected, stores state in separate array
  <ul>
    <li v-for="item in items" :class="{highlight:selected2.includes(item.id)}" @click="selected2.includes(item.id) ? selected2.splice(selected2.indexOf(item.id), 1) : selected2.push(item.id)">{{item.id}}</li>
  </ul>
</div>

CSS

li:hover {
  color: red;
}

li.highlight {
  background: yellow;
}

h2 {
  margin-bottom: 0px;
}

JavaScript

var items = []
for (var i = 1; i <= 10; i++) {
  items.push({
    id: i
  })
}
new Vue({
  el: '#vue',
  data: {
    items,
    selected: undefined,
    selected2: []
  }
})