<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Real time search</title>
<script src="//cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script src="//cdn.jsdelivr.net/npm/axios@0.18.0/dist/axios.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
</head>
<body>
<div id="app">
<p><input type="text" v-model="keyword"></p>
<p>{{ message }}</p>
<ul>
<li v-for='item in items'>
<a v-bind:href='item.url' target="_blank">{{ item.title }}</a>
</li>
</ul>
</div>
<script src="script.js"></script>
</body>
</html>
// Code goes here
var app = new Vue({
el: '#app',
data: {
items: null,
keyword: '',
message: ''
},
watch: {
keyword: function(newKeyword, oldKeyword) {
this.message = 'waiting for you stop typing...'
this.debouncedGetAnswer()
}
},
created: function() {
this.debouncedGetAnswer = _.debounce(this.getAnswer, 1000)
},
methods: {
getAnswer: function() {
if (this.keyword === '')
{
this.items = null
this.message = ''
return
}
this.message = 'Loadng...'
var vm = this
var params = {
page: 1,
per_page: 10,
query: this.keyword
}
axios.get('https://qiita.com/api/v2/items', {
params
}).then(function(response) {
vm.items = response.data
}).catch(function(error) {
vm.messae = 'Error!' + error
}).finally(function() {
vm.message = ''
})
}
}
})
/* Styles go here */