【问题标题】:Toggle Class for an item Vue.js切换项目的类 Vue.js
【发布时间】:2015-09-14 15:35:15
【问题描述】:

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

所以:

我已经设置好了:

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

谢谢

【问题讨论】:

    标签: javascript jquery twitter-bootstrap vue.js


    【解决方案1】:
    <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);
                    });
    
                }
    
            }
    
        });
    

    必须使用组件来更直接地针对每个项目。

    【讨论】:

      【解决方案2】:

      首先,你只有一个变量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,供您参考和处理。单击列表中的一项,它会变成红色。

      【讨论】:

      • 您好,谢谢您的回答。我遇到的问题是 data: { } 是通过 api 传递的,并使用 vue 资源捕获。我不能在每个数据项上附加更高的值。
      • 那么该项目实际上是单数和/或全局的。它与单个数据点无关。只有其中一个。当您从 API 中获取它时,您是否对每个常见问题都有一个“更高”的属性?或者它只是一个变量?
      • 我没有为每个常见问题设置 taller 属性,它只是一个变量。
      • 那么我很困惑为什么你会认为你可以只用一个常见问题解答来改变它。它适用于所有人。
      • 我已经整理好了,请看新的答案,谢谢你的帮助。
      猜你喜欢
      • 2018-02-27
      • 2019-11-30
      • 2018-07-04
      • 2017-10-01
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 2019-08-06
      相关资源
      最近更新 更多