const ENDPOINT = 'https://api.github.com/orgs/codecasts/repos'; new Vue({ el: '#app', data: { repos: [], configs: { orderBy: 'stargazers_count', order: 'desc', filter: '' } }, mounted() { axios .get(ENDPOINT) .then(response => response.data) .then(data => Vue.set(this, 'repos', data)); }, computed: { list() { const filter = this.configs.filter; const list = _.orderBy(this.repos, this.configs.orderBy, this.configs.order); if (_.isEmpty(filter)) { return list; } return _.filter(list, repo => repo.name.indexOf(filter) >= 0); } }, });
<div class="container" id="app"> <header class="page-header"> <h1>Codecasts Repos</h1> </header> <form class="form-inline"> <div class="form-group"> <label>Ordernar por:</label> <select class="form-control" v-model="configs.orderBy"> <option value="name">Nome</option> <option value="stargazers_count">Estrelas</option> </select> </div> <div class="form-group"> <label>Orderm:</label> <select class="form-control" v-model="configs.order"> <option value="asc">Crescente</option> <option value="desc">Decrescente</option> </select> </div> <div class="form-group"> <label>Filtrar</label> <input type="text" class="form-control" placeholder="Filtrar repo por nome" v-model="configs.filter"> </div> </form> <hr> <ul class="list-group"> <li v-for="repo in list" class="list-group-item" :title="repo.description"> <span class="badge"> {{ repo.stargazers_count }} <i class="fa fa-star-o"></i></span> <a :href="repo.url"> {{ repo.name }} </a> </li> </ul> </div>