Как отобразить текущие данные из массива для модема boostrap в vue. js - PullRequest
0 голосов
/ 06 апреля 2020

- Вопрос -

- Вопрос -

Привет, я нубский программист, пытающийся создать веб-приложение Vue. У меня проблема с тем, что у меня есть массив с json данными, через которые я oop перехожу к компоненту, но в этом компоненте у меня есть модал bootstrap, который я хочу показать текущие данные.

Это работает, но когда я нажимаю на модал, он показывает только первый объект в массиве (0), поэтому он не продолжается? Может кто-нибудь помочь мне с этой проблемой? Надеюсь, вы, ребята, поняли мой вопрос, спасибо.

--- КОД страницы (родительский) ---

<template>
  <div class="content">
    <div class="container-fluid">
      <div class="row no-gutters">
        <div class="col-sm-1 col-md-1 col-xl-0"></div>
        <div class="col-sm-12 col-md-10 col-xl-12">
          <h1 id="TreePageTitle"> Text here </h1>
          <div id="grid">

            <TreeCard
              data-toggle="modal"
              data-target="#exampleModalScrollable"
              v-for="tree in treeArray"
              :key="tree.id"
              :tree="tree"
            />

          </div>
        </div>
        <div class="col-sm-1 col-md-1 col-xl-0"></div>
      </div>
    </div>
  </div>
</template>

<script>
import TreeCard from "../components/TreeCard.vue";
export default {
  name: "Trees",
  components: {
    TreeCard
  },

  data() {
    return {
      treeArray: [],
      errors: []
    };
  },
  mounted() {
    try {
      this.treeArray = [
        {
          id: 0,
          name: "obj name 1",
          image:
            "image url here",
          description: "test 1"
        },
        {
          id: 1,
          name: "obj name 2",
          image:
            "image url here",
          description: "test 2"
        }

      ];
    } 
    catch (error) {
      console.log(error);
    }
  }
};
</script>

--- КОД компонента (дочерний) ---

<template>
  <div>
    <div class="card" v-on:click="toggle">
      <img :src="tree.image" class="img-fluid" id="CardImg" />
      <h2 class="card-title">{{tree.name}}</h2>

      <!-- Modal -->
      <div
        class="modal fade"
        id="exampleModalScrollable"
        tabindex="-1"
        role="dialog"
        aria-labelledby="exampleModalScrollableTitle"
        aria-hidden="true"
      >
        <div class="modal-dialog modal-dialog-scrollable" role="document">
          <div class="modal-content">
            <div class="modal-header">
              <h5 class="modal-title" id="exampleModalScrollableTitle">{{tree.name}}</h5>
              <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                <span aria-hidden="true">&times;</span>
              </button>
            </div>
            <div class="modal-body">
              {{tree.description}}
            </div>
            <div class="modal-footer">
              <button type="button" class="btn btn-secondary" data-dismiss="modal"> Close </button>
            </div>
          </div>
        </div>
      </div>

    </div>
  </div>
</template>

<script>
export default {
  name: "Card",
  data() {
    return {
      bodyID: {}
    };
  },
  props: {
    tree: {}
  },
  methods: {
     toggle: function() {
      this.bodyID = this.tree.id;
    }
  }
};
</script>

1 Ответ

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

Вам просто нужно убедиться, что идентификаторы элементов уникальны, поскольку jQuery использует эти идентификаторы для запуска модального режима.

:id="'exampleModalScrollable'+tree.id"

:data-target="'#exampleModalScrollable'+tree.id"

рабочий пример

Возможно, вы захотите рассмотреть bootstrap - vue, который не зависит от jQuery и работает более непосредственно с Vue.

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