Передать значение row.item.attribute в модал с помощью Bootstrap Vuejs

#vue.js #bootstrap-modal

#vue.js #bootstrap-модальное

Вопрос:

У меня есть таблица, где в последнем столбце есть кнопка, при нажатии на которую появляется модал с некоторой информацией и действиями, которые нужно выполнить. В этот модальный файл я хочу передать значение из таблицы (из определенной ячейки каждой строки), но модальный всегда показывает значение ячейки из последней строки таблицы (это похоже на то, что он рассматривает всю таблицу как одну строку). Чтобы выполнить некоторый тест, я написал атрибут, который должен отображаться в заголовке кнопки, и пока он работает хорошо (для каждой кнопки отображается правильный атрибут каждой строки). Похоже, что на следующем уровне (внутри модального) возникает недопонимание, и какой бы модальный режим ни открывался, он всегда представляет значение ячейки последней строки. таблица
модальная

  <b-table
                        sticky-header
                          selectable
                          select-mode="single"
                          selected-variant="success"
                          w-auto
                          show-empty
                          small
                          stacked="md"
                          id="eventdataTable"
                          striped
                          hover
                          responsive
                          :items="items"
                          :fields="event_columns"
                          :per-page="perPage"
                          :current-page="currentPage"
                          :sort-by.sync="sortBy"
                          :sort-desc.sync="sortDesc"
                          :sort-direction="sortDirection"
                          :filter="filter"
                          :filterIncludedFields="filterOn"
                          @filtered="onFiltered"
                        > 
                        <template v-slot:cell(nearby_venues)="row">  
                            <div>                     
                              <b-button
                                variant="info"
                                class="text-center"
                                size="sm"
                                @click="show1 = true"
                               v-b-modal="'modal1'"                       
                                >Nearby Venues  {{ row.item.api_id }}
                               </b-button>
                              <b-modal                         
                                id="modal1"
                                ok-variant="info"
                                v-model="show1"
                                size="sm"
                                title="Nearby Venues"
                              > {{ row.item.api_id }}  *This appears correct*                                           
                                  <p align="left">Choose Venues close to</p>
                                  <b-form-select
                                  v-model="userdata.eventApiId"
                                    class="mb-3"
                                  >
                                      <template slot="first">
                                      <option :value="row.item.api_id">
                                        {{ row.item.api_id }} *This appears wrong -the value of the column cell from the last row*
                                      </option>
                                    </template>
                                 
                                </b-form-select>
                                
                                  <label
                                    class="mr-sm-3"
                                    for="venue-category-selection"
                                  ></label>
                                  <b-form-select
                                    class="mb-2 mr-sm-2 mb-sm-0"
                                    v-model="userdata.selectedVenueCategory"
                                    :options="venue_categories"
                                    value-field="id"
                                    text-field="name"
                                    id="venue-category-selection"
                                    size="sm"
                                  ></b-form-select>
                                
                                <hr width="300" align="left" />
                                <div>
                                  <p align="left">Distance</p>
                                  <label
                                    class="mr-sm-3"
                                    for="event-place-selection"
                                  ></label>
                                  <b-form-input
                                    v-model="userdata.distance"
                                    placeholder="distance"
                                    width="5px"
                                  ></b-form-input
                                  >km.

                                  <b-button
                                    size="sm"
                                    variant="success"
                                    @click="VenuesFromSelectedEvent"
                                    v-b-toggle.collapse-2
                                  >
                                    Click Here
                                  </b-button>
                                </div>
                              </b-modal>
                            </div>
                        </template>                     
                          </table>
 

Ответ №1:

Проблема здесь в том, что в этом компоненте есть цикл, проходящий через каждую строку, отображающий новую b-modal для каждой строки. Проблема в этой части кода:

 ```
<b-form-select
      v-model="userdata.eventApiId"
      class="mb-3">
```
 

Каждый раз, когда модальное значение отображается для новой строки, оно изменяет значение userdata.eventApiId на значение для текущей строки. Таким userdata.eventApiId образом, значение всегда будет api_id для последней строки таблицы.

Одним из решений было бы изменить код так, чтобы при нажатии кнопки вы меняли значение userdata.eventApiId на row.item.api_id .

Я также не рекомендовал бы помещать модал в цикл, так как вы бы создали много скрытых модалов. У меня был бы только один модальный вне таблицы, который изменяет значение userdata.

Комментарии:

1. Проблема решена 🙂 Большое вам спасибо за вашу помощь и поддержку!