Async data loading plugin for Vue.js
- this plugin is written in ES2015, so recommend compile with babel/babel-polyfill.
npm install vue-async-data-2// use as global plugin
import Vue from 'vue';
import { AsyncDataPlugin } from 'vue-async-data-2';
Vue.use(AsyncDataPlugin);// use as locally mixin
import { AsyncDataMixin } from 'vue-async-data-2';
export default {
mixins: [ AsyncDataMixin ],
}<template>
<div>
<p v-if="userNameLoading">Loading...</p>
<p v-else-if="userNameError">Error: {{ userNameError }}</p>
<p v-else>Hello {{ userName }} !</p>
<button v-on:click="asyncReload('userName')">Reload userName</button>
</div>
</template>
<script>
export default {
name: 'show-data',
asyncData: {
userName () {
return new Promise((resolve, reject) => {
setTimeout(_ => {
if (Math.random() > 0.5) {
resolve('risa');
} else {
reject('fetch error...');
}
}, 1000);
})
},
},
}
</script>specify a function that returns Promise.
you can also specify a default value.
asyncData: {
userName () { // return promise
return new Promise((resolve) => {
resolve('risa');
})
},
userNameDefault: 'unknown', // default value
userNameLazy: false, // skip run at mount?
},refresh data.
if name arg is specified, only that field is updated.
this.asyncReload('userName')
this.asyncReload()global reload flag.
global error flag.
if resolve, set response.
if throw reject, set error message.
set to true until there response.
