Получить данные по клику в v-for l oop, а затем l oop через данные - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть кнопка в v-for l oop, которая при нажатии возвращает некоторые данные. Затем я хочу отобразить эти данные ниже или вместо кнопки, на которую нажали кнопку.

<div v-for="(item, index) in items" :key="index">
  <button @click="fetchData(item.id)">Load Data</button>
  <ul v-if="THEDATALOADED">
    <li v-for="(data, index) in THEDATALOADED">
      {{ data.value }}
    </li>
  </ul>
</div>

Я также хочу сохранить все данные под каждой кнопкой, на которую нажали, поэтому я не могу просто установить эту .THEDATALOADED = response.data, если бы я это сделал, он отображал бы эти данные во всех итерациях v-for и обновлял бы их все, когда нажата любая кнопка.

1 Ответ

1 голос
/ 03 апреля 2020

Я рекомендую вам sh выбранные данные в соответствующем элементе:

<div v-for="(item, index) in items" :key="index">
  <button @click="fetchData(item.id,index)">Load Data</button>
  <ul v-if="item.THEDATALOADED">
    <li v-for="(data, index) in item.THEDATALOADED">
      {{ data.value }}
    </li>
  </ul>
</div>

в методе fetchData:

 fetchData(id,index){
      ....
      let tmp=this.items[index];
      tmp.THEDATALOADED=response.data;
      this.$set(this.items,index,tmp);
      ...
  }

Следующий код выполнения иллюстрирует ваш сценарий использования, в этом примере у меня есть набор пользователей, и у каждого пользователя есть несколько сообщений, которые он создал, когда я нажимаю кнопку load Posts, он получает сообщения соответствующего пользователя:

new Vue({
  el: '#app',
  data: {
    users: [],
  },
  mounted() {

    axios.get('https://jsonplaceholder.typicode.com/users')
      .then((response) => {
        this.users = response.data
      })
  },
  methods: {
    getPosts(id, index) {
      axios.get('https://jsonplaceholder.typicode.com/posts?userId=' + id)
        .then((response) => {
          let tmp = this.users[index];
          tmp.posts = response.data;
          this.$set(this.users, index, tmp);
        })
    }
  }
})
<!DOCTYPE html>
<html lang="en" dir="ltr">

<head>
  <meta charset="utf-8">
  <title></title>
  <script src="https://unpkg.com/vue@2.5.17/dist/vue.js"></script>
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  <script src="https://unpkg.com/vue-axios@2.1.4/dist/vue-axios.min.js"></script>
</head>

<body>
  <div id="app">
    <div v-for="(user, index) in users" :key="index">
      <span>{{user.name}}</span>
      <button @click="getPosts(user.id,index)">load Posts</button>
      <ul v-if="user.posts">
        <li v-for="(post, index) in user.posts">
          {{ post.title}}
        </li>
      </ul>
    </div>
  </div>
</body>

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