Vue.js v2.x component for full screen loading indicator
Demo on JSFiddle
# npm
npm install vue-loading-overlay --save
# Yarn
yarn add vue-loading-overlay
<template>
<div class="loading-parent">
<loading :active.sync="isLoading"
:can-cancel="true"
:on-cancel="whenCancelled"
:is-full-page="fullPage"></loading>
<label><input type="checkbox" v-model="fullPage">Full page?</label>
<button @click.prevent="doAjax">fetch Data</button>
</div>
</template>
<script>
// Import component
import Loading from 'vue-loading-overlay';
// Import stylesheet
import 'vue-loading-overlay/dist/vue-loading.min.css';
// Using axios for the demo only
import axios from 'axios';
export default {
data() {
return {
isLoading: false,
fullPage: true
}
},
components: {
Loading
},
methods: {
doAjax() {
this.isLoading = true;
// AJAX example with axios
axios.post('/api/cats').then((response)=>{
this.isLoading = false
})
},
whenCancelled() {
console.log("User cancelled the loader.")
}
}
}
</script>
<style>
.loading-parent {
position: relative;
}
</style>
<template>
<form @submit.prevent="submit" class="loading-parent" ref="formContainer">
<!-- your form inputs goes here-->
<label><input type="checkbox" v-model="fullPage">Full page?</label>
<button type="submit">Login</button>
</form>
</template>
<script>
import Vue from 'vue';
// Import component
import Loading from 'vue-loading-overlay';
// Import stylesheet
import 'vue-loading-overlay/dist/vue-loading.min.css';
// Init plugin
Vue.use(Loading);
// Using axios for the demo only
import axios from 'axios';
export default {
data() {
return {
fullPage: false
}
},
methods: {
submit() {
let loader = this.$loading.show({
container: this.fullPage ? null : this.$refs.formContainer
});
// AJAX example with axios
axios.post('/api/login').then((response)=>{
loader.hide()
})
}
}
}
</script>
<style>
.loading-parent {
position: relative;
}
</style>
The component accepts these props:
Attribute | Type | Default | Description |
---|---|---|---|
active | Boolean | false |
Show loading by default when true , use the .sync modifier to make it two-way binding |
can-cancel | Boolean | false |
Allow user to cancel by pressing escape or clicking outside |
on-cancel | Function | ()=>{} |
Do something upon cancel, works in conjunction with can-cancel |
animation | String | fade |
Transition name |
is-full-page | Boolean | true |
When false ; limit loader to its container* |
- When
is-full-page
is set tofalse
, the container element should be positioned asposition: relative
// pass propsData to component
let loader = this.$loading.show({
// Optional parent container reference
container: this.$refs.loadingContainer,
// Can also pass available props here (camelCase property names)
canCancel: true,
onCancel: this.yourMethodName
});
// hide loader whenever you want
loader.hide();
//Set loader or overlay color by overriding SCSS variables
$loaderColor: #ff0000;
$loaderBackground: #808080;
@import 'vue-loading-overlay/src/scss/index.scss';
<!-- Vue js -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js"></script>
<!-- Lastly add this package -->
<script src="https://cdn.jsdelivr.net/npm/vue-loading-overlay@2"></script>
<link href="https://cdn.jsdelivr.net/npm/vue-loading-overlay@2/dist/vue-loading.min.css" rel="stylesheet">
<!-- Init the plugin and component-->
<script>
Vue.use(VueLoading);
Vue.component('loading', VueLoading)
</script>
- Modern browsers only
- Clone this repo
- Make sure you have node-js
>=6.10
and yarn>=1.x
pre-installed - Install dependencies -
yarn install
- Run webpack dev server -
yarn start
- This should open the demo page at
http://localhost:9000
in your default web browser
- This package is using Jest and vue-test-utils for testing.
- Tests can be found in
__test__
folder. - Execute tests with this command
yarn test
- Buefy loading component
MIT License