【问题标题】:VueJs set active class to the data coming from API, when one li element is clicked in V-for loop当在 V-for 循环中单击一个 li 元素时,VueJs 将活动类设置为来自 API 的数据
【发布时间】:2021-02-16 01:40:18
【问题描述】:

我需要将活动类设置为来自 API 的众多选项之一。同样,第一个选项一开始是活动的,当用户点击它时,它必须切换。 下面是我的模板:

<div @click="showTimezone">
        <span>{{defaultCountry}}</span>
    </div>
<div  id="timezone-menu" class="timezone-menu" v-show="showTimezone">
          <ul >
            <li class="country-menu-item" v-for="item in Options" :id="item.id" :key="item.abbrevation" @click="selectCountry(item)">
                {{ item.optionText }}
            </li>
          </ul>    
        </div>

我将 API 中的数据存储在 Options 数组中。

data() {
     return {
        defaultCountry: "CST",
        Options: [],
    }
   }

在下拉菜单中,CST 默认为粗体。单击其他选项时,它应该失去其样式类并添加到用户单击的其他选项中。请帮助我如何做到这一点。如果需要,将提供更多详细信息。

【问题讨论】:

    标签: html css vue.js vuejs2 vue-component


    【解决方案1】:

    将名为activeId 的属性添加到您的数据对象并在selectCountry 方法中更新它:

    data() {
         return {
           defaultCountry: "CST",
           Options: [],
           activeId:-1
        }
        },
    methods:{
      selectCountry(item){
        ...
        this.activeId=item.id;
      
      }
    }
    

    在模板中添加类绑定:

    <li class="country-menu-item" :class="{'active':item.id===activeId}" v-for="item in Options" 
    

    【讨论】:

    • 我在编译模板时遇到错误。无效的表达式:意外的标记“。”在 {item.id===activeId?'active':' '}
    • 试试&lt;li class="country-menu-item" v-for="item in Options" :class="{item.id===activeId?'active':''}"
    • :class="item.id===activeId?'active':''" 呢?
    • 谢谢,它现在可以工作了。同样默认情况下,下拉菜单中的此选项应处于活动状态。由于数据来自 API,我们如何默认设置为活动? '
      {{defaultCountry}}
      '
    • 您可以将activeId 设置为某个国家/地区ID,而不是-1
    猜你喜欢
    • 2023-03-24
    • 2021-02-15
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2022-01-08
    • 2018-03-20
    相关资源
    最近更新 更多