vue.js 向动态创建的元素添加不同的类

u2nhd7ah  于 2023-01-26  发布在  Vue.js
关注(0)|答案(1)|浏览(144)

我有一个对象数组,其中每个对象都有一个textValue、一个active、info等。我遍历了这个排列,并为每个元素显示按钮。我为里面的每个按钮添加了一个div,在3个段落中,我尝试添加类,并根据每个按钮的条件显示一些段落。我为按钮添加了一个事件,并传递了一个id。这样我就把active设置为true并显示信息,这是针对每个不同的id的。2点击一个按钮会产生一个active类并显示一个数量,点击按钮本身或按钮外部会消除类和数量(p),当我单击按钮时,信息打开,这里有一个按钮,单击时,包含信息的div隐藏(我已经这样做了),我想保持类可见,段落可见,我用条件,但我不能做到这一点,这是代码:

<button 
  v-for="filter in addedFilters" 
  :key="filter" 
  :value="filter.textValue" 
  @click="(e) => {openInfoFiltro(filter, e)}" 
  :class="{'filter-active': filter.active && !optionButtonValue.includes(filter.textValue),  'active-filter-options': filter.active && optionButtonValue.includes(filter.textValue)}">
      <div>
         <p v-if="filter.active && filter.textValue !== 'Uso de suelo' && filter.textValue !== 'Amenidades' && filter.textValue !== 'Clasificación de la tierra' & filter.textValue !== 'Vocaciones'" class="m-0">
           {{ $filters.numeralFormatBtnInfo(filter.info[0]) }} - {{$filters.numeralFormatBtnInfo(filter.info[1]) }}
         </p>

         <p v-else-if="filter.active || filter.textValue === 'Uso de suelo' && filter.textValue === 'Amenidades' && filter.textValue === 'Clasificación de la tierra' && filter.textValue === 'Vocaciones'" class="m-0 amount"> 
             <span v-if="filter.info">({{filter.info === 0 ? '' : filter.info }})</span>
         </p>

         <p class="m-0">{{filter.textValue}}</p>
      </div>
  </button>

函数,当单击按钮并将对象的活动设置为true时

const openInfoFiltro = (id,e) => {
    selectedFilter.value = addedFilters.value.find(val => val.textValue === id.textValue);
    console.log(selectedFilter.value)
    if(selectedFilter.value){
        selectedFilter.value.active = !selectedFilter.value.active
    }    
}

数组,其中i具有不同的文本值

const optionButtonValue = ['Uso de suelo', 'Amenidades', 'Clasificación de la tierra', 'Vocaciones' ]

在另一个组件中,我执行了provide和reject ref,在这里我传递了选定的筛选器(selectedFilter),这里我有一个函数,当单击该函数时,我希望按钮保持活动状态,并根据optionButtonValue显示一个段落或另一个段落,但使其保持活动状态,在这里我将active传递给false以隐藏每个按钮的信息

const showResults = () => {
  console.log('Mostrar resultados')
  landsStore.lands = []
  landsStore.landsadd = []
  selectedFilter.value.active = false

  landsStore.fetchLands('', { filters: filtersStore.getAllFiltersAlgoliaFormat, facetFilters: filtersStore.getAllFacetFilterFormat })
}
2lpgd968

2lpgd9681#

实际上,v-if只等待true和false。但是你在v-if文本定义中使用了。这是不正确的。首先,你只能有条件地改变v-if,比如v-if="{filter.active||filter}“同样在你的p标签中你可以直接输入定义更改文本{{ filter.active && 'bla bla' }}

相关问题