2017-05-02 17 views
3

私はリストをループしてそのリストを表示するためにv-forを使用しています。vue v-forループ、クラスを個別に追加する

レンダリング後、各リストにはタイトルと非表示のコンテンツが含まれています。そのリストのタイトルを1つ選択すると、すべてのコンテンツではなくそのコンテンツが表示されます。

は、これまでのところ、私はこの(@thanksdのおかげで)やっている:あなたがコンテンツを一覧表示する変数を構築している場合

<div class="link"> 
    <p @click="show = true"> Click here to show the content </p> 
    <div v-show="show" class="content"> 
    <p>This is the hidden content</p> 
    </div> 
</div> 
<div class="link"> 
    <p @click="show = true"> Click here to show the content </p> 
    <div v-show="show" class="content"> 
    <p>This is the hidden content</p> 
    </div> 
</div> 

data() { 
    return { 
    show: false, 
    }; 
} 
+0

リストアイテムごとにコンポーネントを作成したいと思います。 – Phil

+0

@Peter英語の文法ミスのためだけに投稿を投票して下さっていると思いますか?英語は私の主要な言語ではなく、私の家族は私をファンキーな英語コースに遣わすためのお金を持っていませんでしたが、映画から私が知っていることすべてを学びました! – Marketingexpert

答えて

2

あなたはこのような何かを書くことができますオブジェクトは、構文はv-for="(value, key) in items"です。 keyをループ内に宣言することも推奨されています。

関連文書hereを読む。

+0

あなたの助言に従ってくれてありがとう、今私はそれをやっていなかったので、私は各ループでキーを使用する:)ありがとう! PS。これは途中で完璧に機能しました! Thnx – Marketingexpert

+1

@Marketingexpert実際には、最新バージョンのVueにアップグレードすると、 'key'を宣言しなければコンソールに警告が表示されます。これは必須ではありませんが、パフォーマンスを向上させる可能性があります。 [doc](http://vuejs.org/v2/guide/list.html#key)です。 – Leo

+0

私は "vue"を使用しています: "^ 2.2.4"、私はそれが私の注意にそれをもたらすために推奨されて以来使用していますが、私はエラーを受け取りませんでした – Marketingexpert

1

これを行うには多くの方法がありますが、それは簡単です

<div class="link" v-for="link in links"> 
    <p @click="link.show = true"> Click here to show the content </p> 
    <div v-show="link.show" class="content"> 
    <p>{{ link.content }}</p> 
    </div> 
</div> 

data() { 
    return { 
    links: [{ 
     title: 'the title', 
     content: 'the hidden content', 
     show: false, 
    },{ 
     title: 'the other title', 
     content: 'the other hidden content', 
     show: false, 
    },] 
    }; 
} 
あなたが反復されている場合

<div class="link" v-for="(item, index) in items" :key="index"> 
    <p @click="show = index"> Click here to show the content </p> 
    <div v-show="show === index" class="content"> 
    <p>This is the hidden content</p> 
    </div> 
</div> 

0

ユーザーがもう一度クリックしたときに非表示にしたい場合は、@Leoの回答に「show === index?show = -1:show = index」という三項比較を追加する必要があります。

<div class="link" v-for="(item, index) in items" :key="index"> 
    <p @click="show === index ? show = -1 : show = index"> Click here to show the content </p> 
    <div v-show="show === index" class="content"> 
    <p>This is the hidden content</p> 
    </div> 
</div> 

data() { 
    return { 
    show: -1, 
    }; 
}