Передача массива в реквизит в Vuejs

Я передаю список значений от родительского компонента его дочернему элементу и хочу получить все значения, но я получаю только последнее.

Это код для родительского компонента:

     <app-spider-web
     v-for="skill in skills"
     :name="skill.name"
     :required="skill.required"
     :vMode1="skill.vMode1"
     ></app-spider-web>

   ...       


   skills: [
      {
        name: 'Frozen Yogurt',
        required: 1,
        vMode1: ''
      },
      {
        name: 'Ice cream sandwich',
        required: 3,
        vMode1: ''
      },
      {
        name: 'Eclair',
        required: 1,
        vMode1: ''
      }
    ]

И это код для дочернего компонента:

props:['name','required','vMode1']

Таким образом, я получаю данные один за другим, и если я хочу напечатать, например, "имя", в списке отображается только фамилия "Эклер", тогда как я хочу иметь массив в дочерних компонентах со всеми именами в них. Какой лучший способ сделать это?

1 ответ

Решение

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

Также не забудьте добавить уникальный ключ, где вы используете директиву v-for.

Parent.vue

<template>
  <div>
    <child
      v-for="(skill, index) in skills.length"
      :key="skill.name"
      :index="index"
      :names-array="skills.map(a => a.name)"
    />
  </div>
</template>

<script>
import Child from './Child'

export default {
  name: 'Parent',

  components: {
    Child
  },

  data () {
    return {
      skills: [
        {
          name: 'Frozen Yogurt',
          required: 1,
          vMode1: ''
        },
        {
          name: 'Ice cream sandwich',
          required: 3,
          vMode1: ''
        },
        {
          name: 'Eclair',
          required: 1,
          vMode1: ''
        }
      ]
    }
  }
}
</script>

Child.vue

<template>
  <div>
    <div>Index: {{ index }}</div>
    <div>Names Array: {{ namesArray }}</div>
    <div>Name: {{ namesArray[index] }}</div>
  </div>
</template>

<script>
export default {
  name: "Child",
  props: ["names-array", "index"]
};
</script>

Выход:

Индекс: 0 Имена Массив: [ "Замороженный йогурт", "Сэндвич с мороженым", "Эклер" ] Название: Замороженный йогурт

Указатель: 1 наименование Массив: [ "Замороженный йогурт", "Сэндвич с мороженым", "Эклер" ] Наименование: Сэндвич с мороженым

Указатель: 2 наименования Массив: [ "Замороженный йогурт", "Сэндвич с мороженым", "Эклер" ] Название: Эклер

Другие вопросы по тегам