Vue l oop через выборку объектов массива API и отображение в Spa с кнопками prev / next и первым видом по умолчанию - PullRequest
0 голосов
/ 25 марта 2020

Я создаю приложение для отображения пользовательских данных из API в Vue JS, и получил верхнюю половину этого, но теперь перехожу к попытке отобразить объекты массива кнопками prev / next, и представление по умолчанию при первом вызове (взято из введенного поля поиска) enter image description here

Есть два запроса get, один для верхнего уровня API для общих данных (который отображается как в pi c выше, а другой - в конкретном разделе c этого, репозитории пользователя Github. Я выложил шаблон для этого, и некоторые из них уже используются, но интересуются лучшим способ начать эту часть. Я хочу загрузить последние 50 репозиторий пользователя и отобразить одно из них по умолчанию, скажем, самое последнее, с некоторыми его атрибутами в литералах шаблона, и иметь возможность нажимать кнопки «предыдущий / следующий» для каждого из них. , который загружается в ul / h4, возможно, с директивой v-for. Код, который я выложил в настоящее время, выглядит следующим образом.

Input

<input
v-model="localValue"
@keypress="fetchData"
placeholder="Enter Github User Name">

Секция, над которой работает (App. vue) * 101 1 *

<section class="repodata text-center">
         <div class="controls">
          <btn class="btn-success btn-lg prev" @click="prev">Prev</btn>
         <!--<button class="btn-success btn-lg play" v-if="!isViewing" @click="play">View</button>-->
          <!--<button class="pause" v-else @click="pause">Pause</button>-->
         <button class="btn-success btn-lg next" @click="next">Next</button>
        </div>
           <b-card class="text-center">
           <b-card-title><h2 class="text-center section-title">Latest Repos</h2></b-card-title>
           <h4 v-for="repo in repos" v-bind:key="repo.title" class="repo-name">{{ repo.name }} - <span>{{ repo.description }}</span></h4>
           <ul class="list-group">
               <li class="list-group-item d-flex justify-content-between align-items-center">Created: Created Repo Page</li>
               <li class="list-group-item d-flex justify-content-between align-items-center">Updated: Updated Repo Page</li>
               <li class="list-group-item d-flex justify-content-between align-items-center">Forks: Repo Forks Count</li>
               <li class="list-group-item d-flex justify-content-between align-items-center">Watchers: Repo Watchers Count</li>
               <li class="list-group-item d-flex justify-content-between align-items-center">Stars: Repo Stars Page</li>
            </ul>
           </b-card>
           <br />
            <ul class="list-group">
             <a href="#" target="_blank" class="btn btn-lg btn-primary">View Repo</a>
             <br />
             </ul>
        </section>

Методы экспорта по умолчанию на данный момент.

export default {
  name: 'app',
   props: {
    value: String
  },
  data () {
     return {
     localValue: "",
     details: {},
     avatar_url: "",
     url_base: 'https://api.github.com/users/',
     //index: 0,
     isViewing: false,
     current: {},
     repos: []
    }
  },
  created () {
      this.localValue = this.value;
      this.$watch("localValue", value => {
      this.$emit("input", value);
      });
      //this.repos = this.repos[this.repo.title];
  },
  methods: {
        fetchData(e) {
        if (e.key == "Enter") {
        fetch(`${this.url_base}${this.localValue}`)
          .then(res => {
            return res.json();
          }).then(this.setResults)
        }
        this.getRepos();
      },
       setResults(results) {
       this.details = results;
       document.querySelector(".profile-details").style.display = "block";
       document.querySelector(".repodata").style.display = "block";
       document.querySelector(".search-box").style.display = "none";
    },
       getRepos() {
         fetch(`${this.url_base}${this.localValue}` + '/repos')
          .then(res => res.json())
          .then(data => {
            let repos = [];
            data.forEach(item => {
            repos = [...repos, ...Object.values(item)];
            });
            });
      },
  prev() {},
  view() {},
  next() {}
  }
}

Входные данные - это наблюдаемое значение localValue, метод fetchData получает основные данные, устанавливает результаты как детали в setResults, и это используется для того, что видно на изображении выше. Затем он запускает метод getRepos, который получает репозитории пользователя (желательно только последние 50), которые я хочу поместить в массив репозиториев для отображения, как указано выше, с кнопками prev / next. Это то, что я пытаюсь найти лучший способ сделать. Я хочу, чтобы по умолчанию было загружено последнее репо с заголовком / des c в h4 (в данный момент не работает) и другими данными в элементах группы списков с кнопкой для просмотра / ссылки на репо. Есть идеи о том, как лучше всего это осуществить? Последние 3 элемента в объекте данных еще не используются, а также функции next, prev и view. Раздел дисплея выглядит как пи c выше, группа списков ul, с кнопкой внизу для просмотра текущего репо и кнопками prev / next вверху. Все в одном файле приложения. vue, компонентов нет.

ОБНОВЛЕНИЕ, сейчас оно как показано ниже, и просто ищет лучший способ отобразить сначала репо по умолчанию, а затем предыдущий / следующий через остальные с названием / des c и некоторыми битами в группе ul. enter image description here Спасибо

1 Ответ

0 голосов
/ 25 марта 2020

На это ответил Дэн, который указал, что я перезаписываю var и ничего не делаю, поэтому исправив, что он работает нормально. Теперь просто ищем способ установить вид по умолчанию с последним репо и предыдущий / следующий через все остальное. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...