VueJs fetch-data component

An implementation of @adamwathan s fetch-data component.

html

<div id="app" class="container" style="margin-top: 15px;">
    <fetch-data url="https://api.github.com/orgs/vuejs/repos">
        <div slot="loading">Loading repositories</div>

        <div slot-scope="{ response: repos }" class="columns is-mobile">
            <div class="column is-half is-offset-one-quarter">
                <article class="media" v-for="repo in repos.slice(0, 5)">
                    <figure class="media-left">
                        <p class="image is-64x64">
                            <img :src="repo.owner.avatar_url">
                        </p>
                    </figure>
                    <div class="media-content">
                        <div class="content">
                            <p>
                                <strong>{{ repo.full_name }}</strong> <small><i class="fa fa-star"></i> {{ repo.stargazers_count }}</small>
                                <br>{{ repo.description }}
                            </p>
                        </div>
                    </div>
                </article>
            </div>
        </div>
    </fetch-data>
</div>

JavaScript

Vue.component('fetch-data', {
  props: ['url'],
  data() {
    return {
      loaded: false,
      response: null,
    }
  },
  mounted() {
    axios.get(this.url)
      .then((response) => {
        this.response = response
        this.loaded = true
      })
  },
  render() {
    if (!this.loaded) {
      return this.$slots.loading[0]
    }

    return this.$scopedSlots.default({
      response: this.response.data,
    })
  },
})

new Vue({
    el: '#app'
})

Demo

See the Pen VueJs fetch-data component without template by chris (@chrgl86) on CodePen.