Git Product home page Git Product logo

vue-loading-overlay's Introduction

Vue Loading Overlay Component

vue-js downloads npm-version github-tag license build-status

Vue.js v2.x component for full screen loading indicator

Demo on JSFiddle

Installation

# npm
npm install vue-loading-overlay --save

# Yarn
yarn add vue-loading-overlay

Usage

As component

<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>

As plugin

<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>

Available props

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 to false, the container element should be positioned as position: relative

API methods

this.$loading.show()

// 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();

Style

//Set loader or overlay color by overriding SCSS variables

$loaderColor: #ff0000;
$loaderBackground: #808080;

@import  'vue-loading-overlay/src/scss/index.scss';

Install in non-module environments (without webpack)

<!-- 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>

Browser support

Run examples on your localhost

  • 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

Testing

  • 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

Inspired by

  • Buefy loading component

License

MIT License

vue-loading-overlay's People

Contributors

abdullahtariq1171 avatar ankurk91 avatar noahcardoza avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.