переключить класс на вывод функции в vue

#javascript #html #vue.js #vue-component

Вопрос:

Я хочу отобразить содержимое requestData li элементов to каждый элемент списка получает функцию onclick, которая, если щелкнуть(выбрать) элемент li, добавляет определенное значение из ссылки в массив позже, если щелкнуть снова(не выбран), удаляет элемент /

как я могу объединить вывод функции true / false
:class="{ selected: requestData }" чтобы добавить или удалить класс, если он выбран/не выбран

  lt;templategt;  lt;sectiongt;  lt;ulgt;  lt;li  v-for="item in requestData.items"  :key="item.id"  :class="{ selected: requestData }"  @click="getSelectedElemData($event.target)"  gt;  {{ item.name }}  lt;/ligt;  lt;/ulgt;  lt;/sectiongt; lt;/templategt;  lt;scriptgt; import { onMounted, ref } from "@vue/runtime-core"; import items from "../assets/comp.Data/items.json";  export default {  setup() {  let requestData = ref(items);    let selectedElements = [];    function getSelectedElemData(target) {     for (let element of requestData._rawValue.items) {  if (target.innerText === element.name) {  console.log(element);  // Add to calc  // update the selectedElements array  selectedElements.push(element);  console.log(selectedElements);   return true;  }  }  }   return {  requestData,  getSelectedElemData,  };  }, }; lt;/scriptgt;   

Комментарии:

1. итак, вы хотите сказать, что если элемент списка выбран в selectedElements, вы хотите, чтобы этот li выбрал класс и удалил класс, если он не выбран?

2. да именно это должно быть индивидуально для каждого элемента

Ответ №1:

Вы можете попробовать использовать это приложение и вызвать функцию isItemSelected для каждого элемента. Если элемент включен в список, класс, который мы добавили в li, в противном случае он будет удален. И измените функцию isItemSelected в соответствии с вашим текущим набором данных, ниже подходите к ней для массива объектов.

 lt;templategt;  lt;sectiongt;  lt;ulgt;  lt;li  v-for="item in requestData.items"  :key="item.id"  :class="{ 'selected': isItemSelected(item) }"  @click="getSelectedElemData($event.target)"  gt;  {{ item.name }}  lt;/ligt;  lt;/ulgt;  lt;/sectiongt; lt;/templategt;  lt;scriptgt; import { onMounted, ref } from "@vue/runtime-core"; import items from "../assets/comp.Data/items.json";  export default {  setup() {  let requestData = ref(items);    let selectedElements = [];   function getSelectedElemData(target) {    for (let element of requestData._rawValue.items) {  if (target.innerText === element.name) {  console.log(element);  // Add to calc  // update the selectedElements array  selectedElements.push(element);  console.log(selectedElements);   return true;  }  }  }   function isItemSelected(item){  return selectedElements.find(element=gt;element.id===item.id)  }   return {  requestData,  isItemSelected,  getSelectedElemData  };  }, }; lt;/scriptgt;  

Комментарии:

1. это тоже была моя идея, но использование выходных данных функций :class , похоже, не работает

2. Попробуйте проверить dom в вашем браузере и посмотреть, подключается ли класс или нет.