Vue

by Evgeniy Lukovsky

HTML

<script src="https://unpkg.com/[email protected]/dist/VueBootstrapTypeahead.umd.min.js"></script>
<div id="app">
  <h2>Todos:</h2>
  <input type="text" name="search" placeholder="search" v-model="search" v-on:input="getData"/>
  <ol>
  <button v-on:click="getData">Go</button>
    <li v-for="todo in cities">
      <label>
        <!-- <input type="checkbox"
          v-on:change="toggle(todo)"
          v-bind:checked="todo.done"> -->
       {{todo}}
       <!--  <del v-if="todo.done">
          {{ todo }}
        </del>
        <span v-else>
          {{ todo }}
        </span> -->
      </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: {
    todos: [],
    search: "",
    cities: [],
  },
  created(){
  	this.getData()
  },
  methods: {
  	toggle: function(todo){
    	todo.done = !todo.done
    },
    async getData() {
    	if(!this.search) {return []}
    	let res = await fetch(`https://api.teleport.org/api/cities/?search=${this.search}`)
      let list = await res.json()
      let results = list._embedded["city:search-results"]
      console.log("loaded")
      this["cities"] = results.map((i)=>{
      	return i["matching_full_name"];
      })
    },
  }
})