jun_dev
@jun_dev
Frontend-developer

Как заменить имя объекта в цикле vue.js?

Вопрос сформулировал достаточно коряво, но суть в следующем.
Необходимо при клике на тег li заменить blockItems.items1 на blockItems.items2, а при повторном клике заменить blockItems.items2 на blockItems.items1
<ul class='items'>
		<li class='item' @click='replacItems' v-for='item in blockItems.items1'>
			<div class='item__title'>{{ item.title }}</div>
		</li>
	</ul>


blockItems: {
   items1: [
      {title: 'Загловок 1'},
      {title: 'Заголовк 2'},
   ],
   items2: [
      {title: 'Загловок 3'},
      {title: 'Заголовк 4'},
   ]
}

	replacItems() {
		this.blockItems.items1 = this.blockItems.items2;
	}
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Что если таких items должно быть больше двух? Давайте решим задачу в более общем виде.

Вместо объекта пусть будет массив, также добавим в компонент свойство, представляющее индекс отображаемого элемента:

data: () => ({
  index: 0,
  items: [
    [ 'hello, world!!', 'fuck the world', 'fuck everything' ],
    [ '69', '187', '666' ],
    [ '!!!', '???', ':::' ],
    [ '+++', '***', '///' ],
  ],
}),

Если индекс меньше длины массива - показываем содержимое соответствующего элемента, по клику увеличиваем индекс; в противном случае показываем кнопку, клик по которой сбросит индекс:

<ul v-if="index < items.length" @click="index++">
  <li v-for="n in items[index]">{{ n }}</li>
</ul>
<button v-else @click="index = 0">давай заново</button>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы