Обеспечение соответствия динамически создаваемых раскрывающихся списков значению в модели Vue из исходного раскрывающегося списка

У меня есть раскрывающийся список, который заполняется из массива в моей модели Vue, например:

<!-- First dropdown -->
<select v-model = "building">
  <option v-for = "building in buildings" v-bind:value = "building.id">
      {{ building.name }}
  </option>
</select>
<!-- Entries Input -->
<input v-model = "entries" type = "number">

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

<!-- Dynamically created dropdowns -->
<div v-for = "entry in entries">
  <select>
    <option v-for = "building in buildings" :selected = "building.id == building">
      {{ building.name }}
    </option>
  </select>
</div>

Мне нужно, чтобы динамически создаваемые раскрывающиеся списки имели тот же выбор, что и первый раскрывающийся список. Я не могу связать их через v-model, потому что мне нужно, чтобы каждый из них мог быть изменен, не затрагивая другие.

есть идеи как это сделать? Я думал, что мой код :selected = "building.id == building" будет работать, но, похоже, это не так.

Вы используете building для элемента данных, а также для псевдонима v-for.

Roy J 01.02.2019 21:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
713
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте привязать свой второй раскрывающийся список к вычисляемому свойству на основе первого следующим образом:

 computed:{
          cpt_building:{
                    get(){
                      return this.building;
                      },
                    set(value){
                     //use your value whatever you want
                      }
                }

шаблон :

  <div v-for = "entry in entries">
     <select v-model = "cpt_building">
       <option v-for = "build in buildings" :selected = "build.id == building">
         {{ building.name }}
       </option>
     </select>
   </div>

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

   data(){
        return{
           building:0,
           building2:0,
           ...
            }
          },
    watch:{
         building(val){
              this.building2=val;
               }
           }

шаблон :

  <div v-for = "entry in entries">
     <select v-model = "building2">
       <option v-for = "build in buildings" :selected = "build.id == building">
         {{ building.name }}
       </option>
     </select>
   </div>

Это полезное начало. Однако не будут ли все выпадающие списки привязаны к cpt_building, поэтому, если один из них изменится, все они изменятся?

aCarella 01.02.2019 21:03

второй выбор зависит от первого, а первый нет

Boussadjra Brahim 01.02.2019 21:07

Это правильный ответ, я просто пытаюсь понять, почему это работает. Тогда я почитаю о вычисляемых свойствах. Спасибо.

aCarella 01.02.2019 21:15

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