JavaScript - 複数の div を持つ v-for に :key を追加する方法

okwaves2024-01-25  9

HTML 要素なしで v-for ループを作成したいので、親として <template を使用することにしました。このループに :key を割り当てる方法がわかりません。テンプレートやループ内のすべての div に割り当てることはできません。何かアイデアはありますか?

<template
  v-for="{ id, text, option, percentage, value } in reports"
>
  <div class="table-row__index">
    {{ id }}
  </div>
  <div class="table-row__title">
    <p>{{ text }} - <strong>{{ option }}</strong></p>
  </div>
  <div class="table-row__info">
    {{ percentage }}%
  </div>
  <div class="table-row__info">
    {{ value }}
  </div>
</template>

これは良い習慣ではないと思います。常にテンプレートタグ内に 1 つの親要素を配置し、その中にすべての HTML を含める必要があります。この方法で実行しない具体的な理由はありますか?

– ヴィプル

2020 年 9 月 3 日 12:38

display: Grid と Grid-template-columns を持つ親 div があります。そのため、テンプレートに要素を 1 つも追加できません

– クイッペ

2020 年 9 月 3 日 12:53

わかりました。次に、要素ごとに実行する必要があります。

– ヴィプル

2020 年 9 月 3 日 13:14



------------------------

良い習慣として、常に p を含める必要があります。内部に要素はありません。ただし、制約により、公式ドキュメントに記載されているように、テンプレートで for ループを使用しても問題ありません。

https://v2.vuejs.org/v2/guide/list.html#v-for-on-a-lt-template-gt

この場合、キーは子要素/コンポーネントに追加する必要があり、これが公式に推奨されている方法です。

この例を参照して、div の内部テンプレートにキーを追加してください。

new Vue({
    el: '#app'
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <template v-for="n in 5">
    <span :key="'number' + n">{{ n }}</span>
    <span :key="'dot' + n">. </span>
  </template>
</div>

2020 年 9 月 3 日 13:30 に回答

ヴィプル

ヴィプル

1,283

6 個

銀バッジ 6 個

12 個

銅バッジ 12 個

0



------------------------

テンプレートに for ループを含めることはできません。 for ループ ディレクティブは、テンプレート内の最初の子コンポーネント (またはルート コンポーネント) 内にのみ含めることができます。

ループをレンダリングする方法の例を次に示します。

<template>
  <div class="cant-have-for-loop-this-is-the-root-component">
    <div v-for="{ id, text, option, percentage, value } in reports" :key="{id}">
        <div class="table-row__index">
          {{ id }}
        </div>
        <div class="table-row__title">
        <p> {{ text }} - <strong>{{ option }}</strong></p>
        </div>
        <div class="table-row__info">
            {{ percentage }}%
        </div>
        <div class="table-row__info">
            {{ value }}
        </div>
    </div>
  </div>
</template>

これは、ためらうことなくスムーズに実行されます。このスクリーンショットに示されているように、スタイルなしでレンダリングされます。

これがあなたが達成したいことの答えになることを願っています。

2

いいえ、余分な div を追加することはできません。これによりレイアウトが損なわれてしまいます

– クイッペ

2020 年 9 月 3 日 13:51

ボーダーボックスを表示するだけでは、Vue でやりたいことはできません

– mトレブランカ

2020 年 9 月 3 日 13:58

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。