切换 Class 项 Vue.js

Toggle Class for an item Vue.js

所以我有一个使用 vue 资源从 api 引入的数据列表。我正在尝试将此列表与 bootstrap 手风琴集成。

所以:

我已经设置好了:

data: {
  taller: false
}

<div class="panel panel-default"
  v-repeat="faq: faqs | filterBy searchText" 
  v-transition="staggered" 
  stagger="200"
  v-on="click: toggleHeight"
  v-class="active: taller">

所以在点击时我将调用 toggleHeight 并通过 faq 实例:

toggleHeight: function(faq) {
  this.taller = true;
}

此函数将 taller 设置为 true,但是它将所有常见问题解答项都设置为 true,而不仅仅是我传递给切换高度的那个。

如何只returntaller: true点击常见问题解答项目?

谢谢

首先,你只有一个变量taller。不是每个常见问题解答。所以你必须把它改成这样:

new Vue({
    el: '#faq-list',
    data: {
        faqs: [{id:'foo',taller:false},{id:'bar',taller:true}]
    },
    methods: {
        toggleHeight: function (faq, ev) {
            faq.taller = false;
            ev.target.classList.add('active');
        }
    }
});

你的 HTML 是这样的:

<div id="faq-list">
<div class="panel panel-default"
  v-repeat="faq: faqs" 
  v-on="click: toggleHeight (faq, $event)"
  v-class="active: taller">
      {{ faq.id }}</div>
</div>

为了好玩,我添加了 CSS 以查看工作情况:

.active {
    color: red;
}

这里是JSfiddle,供大家参考和摆弄。单击列表中的一项,它变为红色。

<div id="demo">

        <div class="input-group">
            <input class="form-control" v-model="searchText">
        </div>

        <script id="item-template" type="x-template">


            <div 
            class="stag"
            v-on="click: toggleHeight()"
            v-class="active: taller"
            >

                <h3>{{  item.question }}</h3>

                <h4>{{  item.answer }}</h4>

            </div>

        </script>

        <question 
            v-repeat="item: items | filterBy searchText" 
            v-transition="staggered" 
            stagger="200">
        </question>

    </div>
</div>

和 js:

Vue.component('question', {

        template: document.querySelector('#item-template'),

        data: function() {

            return {

                taller: false

            }

        },

        methods: {

            toggleHeight: function() {

                this.taller = ! this.taller

            }
        }

    });

    new Vue({

        el: '#demo',

        ready: function() {

            this.fetchItems();

        },

        methods: {

            fetchItems: function() {

                this.$http.get('/dev/frequently-asked-questions/api/index', function(items) {
                    this.$set('items', items);
                });

            }

        }

    });

必须使用组件更直接地定位每个项目。