autosuggest.js (1047B)
- const debounceMilliseconds = 500
- export default {
- props: {
- query: { // function to query results and return a promise
- type: Function,
- required: true
- },
- filter: { // function to filter results in real time
- type: Function
- },
- placeholder: {
- type: String,
- default: 'Search...'
- }
- },
- data () {
- return {
- term: '',
- timeout: null,
- results: [],
- resultsVisible: false
- }
- },
- computed: {
- filtered () {
- return this.filter ? this.filter(this.results) : this.results
- }
- },
- watch: {
- term (val) {
- this.fetchResults(val)
- }
- },
- methods: {
- fetchResults (term) {
- clearTimeout(this.timeout)
- this.timeout = setTimeout(() => {
- this.results = []
- if (term) {
- this.query(term).then((results) => { this.results = results })
- }
- }, debounceMilliseconds)
- },
- onInputClick () {
- this.resultsVisible = true
- },
- onClickOutside () {
- this.resultsVisible = false
- }
- }
- }