0

I have a v-select nested in a v-for for items..

So, basically, v-for item in items gives me a table containing all items. In this table, I have a v-select containing it's own array of items pulled from a computed property (getter).

So, if I have 3 items, then I would have a 3 item table with 3 v-selects all containing the same dropdown options populated from the computed.

My issue is, when I select an option in one v-select, it populates in all of them.

How do I configure it to only populate the one particular v-select, and not all of them?

Surprisingly, every example I have researched, is either dealing with nested data, or something else not relevant here. But if this does happen to be a duplicate, I would be happy to be pointed in the right direction.

a bit of shorthand code for context:

<v-data-table :items="getItems">
<tr>
<td>{{ item.name }}</td>
<td> <v-select :items="availableSelections"/>
</tr>
</v-data-table>

get getItems() {
 // returns iterated items
}
get availableSelections() {
 // returns selection choices in an array

So, my intended behavior here is, if I have 3 items returned from getItems(), I would have 3 rows filled with 3 names and 3 v-selects, all with the same dropdown choices from availableSelections(). But when I select an option from a v-select from one row, it would not populate the other v-selects in other rows.

Khepf
  • 352
  • 1
  • 4
  • 24

1 Answers1

2

Do you want something like that:

<template>
  <v-app>
    <v-content>
      <v-data-table :items="items">
        <template v-slot:items="{ item }">
          <td>{{ item.name }}</td>
          <td>
            <v-select :items="options" v-model="item.optionSelected" />
          </td>
          <td>{{ item.optionSelected }}</td>
        </template>
      </v-data-table>
    </v-content>
  </v-app>
</template>

<script>
export default {
  name: 'app',
  data: () => ({
    items: [
      { name: 'Name 1', optionSelected: null },
      { name: 'Name 2', optionSelected: null },
      { name: 'Name 3', optionSelected: null },
    ],
    options: ['Option 1', 'Option 2', 'Option 3'],
  }),
};
</script>

In this example, each v-select don't change others components.

Gabriel Willemann
  • 1,871
  • 1
  • 6
  • 11