Vue组件切换

时间:2016-04-26 20:50:25

标签: javascript vue.js

我是Vue的新手,正在开发一个FAQ列表组件,可以在点击问题时切换答案。 我不确定如何使用Vue组件/模板切换类。

另外,在数据(faq_list)中使用show属性是一个很好的方法吗?

以下代码。

<div id="app">
    <faqs :list="faq_list" :active.sync="active"></faqs>
    <pre> {{$data| json}} </pre>
</div>

<template id="faq-template">
    <ol>
        <li v-for="list_item in list">
            <div class="question"> {{list_item.question}} </div>
            <div  v-if="toggleActive" @click='toggleActive(list_item)'>
                {{list_item.answer}}
            </div>
            <strong @click="removeFaq(list_item.answer)">x</strong>
        </li>
    </ol>
</template>

Vue.component('faqs', {
        props: ['list', 'active'],

        template: '#faq-template',

        methods: {
            removeFaq: function(list_item){
                this.list.$remove(list_item);
            },

            toggleActive: function(list_item) {
                console.log(list_item.show);
              list_item.show = !list_item.show;
            }

        }
    });

    new Vue({
        el: '#app',

        data: {

            active: {},

            'faq_list' : [
                { question: 'q01', answer: 'q1',  show: false},
                { question: 'q02', answer: 'a2',  show: false},
                { question: 'q03', answer: 'a3',  show: false},
                { question: 'q04', answer: 'a4',  show: false},
                { question: 'q05', answer: 'a5',  show: false}
            ]
        }
    });

1 个答案:

答案 0 :(得分:2)

<li v-for="list_item in list">
    <div class="question" @click='list_item.show = !list_item.show'> {{list_item.question}} </div>
    <div v-if="list_item.show">
        {{list_item.answer}}
    </div>
    <strong @click="removeFaq(list_item)">x</strong>
</li>
  1. 您有v-if="toggleActive",但应该是v-if="list_item.show"

  2. 我将点击向上移动到问题div,以便您可以显示/隐藏div,否则一旦隐藏,您就无法点击它

  3. 简化@click='list_item.show = !list_item.show'虽然您的工作也是:)

  4. 是否有错误的参数发送到删除功能(您希望list_item.answer发送list_item