A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://www.npmjs.com/package/vue-prom below:

vue-prom - npm

vue-prom

Vue promise wrapper component

About

The goal of this component is to simplify rendering logic based on promise state (pending / fulfilled, rejected). The component keeps track of the promise's state and proposes slots to render content accordingly.

You should avoid this component when:

Installation NPM

npm install --save vue-prom

npm package link

CDN

<script src="https://unpkg.com/vue-prom@latest"></script>

Usage

With vue-prom we would write the following:

<template>

  <div>

      <vue-prom :promise="api.getUser()">

          <div slot="pending">

              Loading user...

          </div>

          <div slot="then" slot-scope="{result}">

              Hello {{ result.firstName }} {{ result.lastName }}

          </div>

          <div slot="catch" slot-scope="{error}">

              {{ error.message }}

          </div>

      </vue-prom>

  </div>

</template>

 

<script>

import VueProm from 'vue-prom';

import api from './api';

export default {

  data() {

    api

  },

  components: {

      VueProm

  }

};

</script>

Instead of:

<template>

    <div>

        <div v-if="loading">

            Loading user...

        </div>

        <div v-else-if="error">

            {{ error.message }}

        </div>

        <div v-else>

            Hello {{ result.firstName }} {{ result.lastName }}

        </div>

    </div>

</template>

 

<script>

import api from './api';

export default {

  created() {

    this.loading = true;

    this.error = null;

    api

      .getUser()

      .then(result => (this.user = result))

      .catch(error => (this.error = error))

      .finally(_ => (this.loading = false));

  },

  data() {

    return {

      loading: false,

      user: null

    };

  }

};

</script>

Alternatively, to keep the template concise, we can omit the 'pending' and 'catch' slots altogether and rely on the default labels provided by the component instead.

<template>

  <div>

      <vue-prom :promise="api.getUser()">

          <div slot="then" slot-scope="{result}">

              Hello {{ result.firstName }} {{ result.lastName }}

          </div>

      </vue-prom>

  </div>

</template>

Props

The component watches both the promise and refresh props, the promise will automatically re-execute when the value of either of these changes.

Slots

All slots are optional.

Name Visible when Slot type(s) If absent pending The promise is pending Regular only A span with 'Loading...' catch The promise was rejected Regular and scoped A span with 'Error' then The promise was fulfilled Regular and scoped A span with 'Loaded'

Data exposed by scoped slots:


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4