mirror of
https://github.com/tenrok/vue-select.git
synced 2026-06-13 08:32:26 +03:00
50 lines
1.2 KiB
Vue
50 lines
1.2 KiB
Vue
<template>
|
|
<v-select :options="paginated" @search="query => search = query" :filterable="false">
|
|
<li slot="list-footer" class="pagination">
|
|
<button @click="offset -= 10" :disabled="!hasPrevPage">Prev</button>
|
|
<button @click="offset += 10" :disabled="!hasNextPage">Next</button>
|
|
</li>
|
|
</v-select>
|
|
</template>
|
|
|
|
<script>
|
|
import countries from '../data/countries.js';
|
|
export default {
|
|
data: () => ({
|
|
countries,
|
|
search: '',
|
|
offset: 0,
|
|
limit: 10,
|
|
}),
|
|
computed: {
|
|
filtered () {
|
|
return this.countries.filter(country => country.includes(this.search));
|
|
},
|
|
paginated () {
|
|
return this.filtered.slice(this.offset, this.limit + this.offset);
|
|
},
|
|
hasNextPage () {
|
|
const nextOffset = this.offset + 10;
|
|
return Boolean(this.filtered.slice(nextOffset, this.limit + nextOffset).length);
|
|
},
|
|
hasPrevPage () {
|
|
const prevOffset = this.offset - 10;
|
|
return Boolean(this.filtered.slice(prevOffset, this.limit + prevOffset).length);
|
|
}
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style scoped>
|
|
.pagination {
|
|
display: flex;
|
|
margin: .25rem .25rem 0;
|
|
}
|
|
.pagination button {
|
|
flex-grow: 1;
|
|
}
|
|
.pagination button:hover {
|
|
cursor: pointer;
|
|
}
|
|
</style>
|