Groyreg
@Groyreg
Front-end

Как через директиву v-for отобразить определенный набор элементов?

Добрый день. Мне необходимо в другом месте вывести список лишь выбранных вариантов после сохранения пользователем.

Есть массив следующего вида:
resultGenes : [ {
      id: 10,
      name: 'IL15RA',
      fullname: null,
      description_eng: null,
      description_ru: null,
      snps: [
        {
          chosenOption: 28,
          id: 19,
          gene_id: 10,
          rs: null,
          name: null,
          name2: null,
          description_ru: null,
          genotypes: [
            {
              id: 30,
              snp_id: 19,
              value: 'CC',
              frequency: 21.6,
              description_ru: null
            },
            {
              id: 28,
              snp_id: 19,
              value: 'AA',
              frequency: 21.7,
              description_ru: null
            },
            {
              id: 29,
              snp_id: 19,
              value: 'AC',
              frequency: 56.7,
              description_ru: null
            }
          ]
        }
      ]
    }]

На основе этого массива выводится с помощью директивы v-for такая таблица:
59fadaf45b2d6097808853.png
Вот код таблицы:
<div v-for="gene in resultGenes" class="wrapper">
    <div class="gtm-top-part row">
        <div class="gtm-title-wrapper">
            <div class="gtm-gen-title"><span class="vert-align">Ген</span></div>
        </div>
        <div class="gtm-gen-data">
            <span class="vert-align">
                <a @click="chosenGen(gene, chartgendata)" href="#geninfo" data-toggle="modal" class="gen-btn">{{gene.name}}</a>
            </span>
        </div>
    </div>
    <div v-for="snp in gene.snps" class="gtm-bottom-part row">
        <div class="gtm-title-wrapper">
            <div class="gtm-snp-title"><span class="vert-align">RS</span></div>
        </div>
        <div class="gtm-snp-data"><span class="vert-align">{{snp.name}}</span></div>
        <div class="gtm-title-wrapper">
            <div class="gtm-var-title"><span class="vert-align">Тип</span></div>
        </div>
        <div class="gtm-var-data">
            <span v-for="variant in orderGenotypes(snp.genotypes)" class="gtm-var-in vert-align">
                <el-radio v-model="snp.chosenOption" :label="variant.id">{{variant.value}}</el-radio>
            </span>
            <button class="gtm-var-btn-clear close" type="button" aria-hidden="true">×</button>
        </div>
    </div>
</div>

Есть еще метод, с помощью которого отрисовываются варианты:
methods: {
		orderGenotypes(variants) {
			return this._.orderBy(variants, 'value')
		}
}

Еще есть две кнопки для сохранения и обнуления вариантов:
<div>
    <button class=" btn-gt btn btn-primary" @click="save()">save</button>
    <button class=" btn-gt btn btn-primary" @click="resetForm()">cancel</button>
</div>

Обработчики кнопок:
resetForm() {
        for (var j=0, jLen=Object.keys(this.resultGenes).length; j<jLen; j++) {
          for (var s = 0, sLen = Object.keys(this.resultGenes[j].snps).length; s < sLen; s++) {
              for (var g = 0, gLen = Object.keys(this.resultGenes[j].snps[s].genotypes).length; g < gLen; g++) {
                this.$set(this.resultGenes[j].snps[s], 'chosenOption', undefined);
              }
            }
          }
      },
      save(){
        this.chosenGenotypes = [];
        for (var j=0, jLen=Object.keys(this.resultGenes).length; j<jLen; j++) {
          for (var s = 0, sLen = Object.keys(this.resultGenes[j].snps).length; s < sLen; s++) {
              if (this.resultGenes[j].snps[s].chosenOption){
                this.chosenGenotypes.push({snp_id:this.resultGenes[j].snps[s].id, genotype_id:this.resultGenes[j].snps[s].chosenOption})
              }
          }
        }

Мне необходимо в другом месте вывести аналогичную таблицу, только чтобы вместо всех вариантов отображались только выбранные пользователем: когда пользователь выбирает какой-то вариант обновляется переменная chosenOption
в ней сохраняется id, который равнозначен genes.snps.genotypes[i].id. Т.е. в примере из массива сверху chosenOption = 28 эта переменная равна genotypes с id 28 имеющему value AA и именно это AAбудет выбрано при отрисовке вариантов в таблице. И это значение необходимо вывести в другом месте с остальными выбранными пользователем.

Как мне вывести в итоге список лишь выбранных вариантов?
  • Вопрос задан
  • 356 просмотров
Решения вопроса 1
kulakoff
@kulakoff Куратор тега Vue.js
Vue.js developing
Computed свойство, которое будет фильтровать данные по вашему условию.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы