bogdan_uman
@bogdan_uman
шлЫмазл неукЪ-поцЪ

Передача массива в props?

Здравствуйте. Подскажите пожалуйста. При передаче массива через props, не обновляется значение переменной в data.
Переменная pickeds не обновляется когда меняется значение переданного значения value когда мы переходим на следующий элемент
<app-some :value='items[activeId].value' ></app-some>

5a858146046c5732599616.png
Вот пример

Vue.component('app-some', {
  props: ['value'],
  data() {
    return {
      pickeds: this.value
    }
  },
  template: `
    <div>
      <label v-for='(picked, index) in pickeds' style='margin: 15px' :key='index'>
        <input type='checkbox' :checked='pickeds[index]'> {{ index }}
      </label>
    </div>`
});


new Vue({
  el: '#app',
  template: `
    <div>
      <app-some :value='items[activeId].value' ></app-some>
      <button :disabled='activeId===0' @click='activeId--' >Назад</button>
      <button :disabled='activeId===items.length-1' @click='activeId++' >Далее</button>
      <pre>{{ items[activeId].value }} </pre>
    </div>`,
  data() {
    return {
      activeId: 0,
      items: [ { value: [false, true, false] }, { value: [true, true, false] }]
    }
  }
})
  • Вопрос задан
  • 1747 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Дело в том, что значение pickeds задаётся лишь единожды - при создании экземпляра компонента app-some, так что странно ожидать, что оно изменится - вы этого нигде не делаете.

Не знаю, чего конкретно вам надо, но... Чтобы чекбоксы переключились, есть варианты:
  • Отказаться от внутреннего массива, использовать параметр. Типа так.
  • Использовать computed вместо data. Типа так.
  • Задать key для app-some, это приведёт к созданию нового экземпляра компонента при изменении activeId. Типа так.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы