nskarl
@nskarl
Вообще дизайнер

Как обновить переменную только в текущей итерации vue?

привет всем!

Есть вот такой незамысловатый код компонента vue
<li v-for="(comment, index) in comments" :key="index" class="c">\
	<textarea @click="clickTextarea()" :style="clicked ? active : passive"></textarea>\
</li>\

data: function () {
	return {
		clicked : false,
		active: 'height:auto; ',
		passive: 'height:22px; '
	}
},
methods: {
	clickTextarea: function() {
		this.clicked = true;
	}
}


смысл в том есть массив комментариев, вложенный, выведенный деревом
и в каждом комментарии есть своя textarea, которая по умолчанию имеет clicked = false, style = passive
при клике на эту текстареа, clicked становится true и соответственно style меняяется на active

но вот проблема в том, что clicked = true применяется на весь уровень комментариев, а не только на текущую итерацию
как ему сказать чтобы только для текущего textarea сделалать clicked = true?
  • Вопрос задан
  • 387 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега Vue.js
У каждого комментария должен быть свой clicked, а не один на всех.

Добавляете в компонент свойство - активный комментарий:

data: () => ({
  ...
  activeComment: null
})

При клике по textarea назначаете этому свойству в качестве значения соответствующий комментарий. Стили назначаете в зависимости от равенства activeComment и текущего комментария:

<li v-for="comment in comments">
  <textarea
    @click="activeComment = comment"
    :style="activeComment === comment ? active : passive"
  ></textarea>
</li>
Ответ написан
kulakoff
@kulakoff Куратор тега Vue.js
Vue.js developing
<li v-for="(comment, index) in comments" :key="index" class="c">\
  <textarea @click="currentIndex=index" :style="currentIndex == index ? active : passive"></textarea>\
</li>

data: function () {
  return {
    currentIndex : -1,
    active: 'height:auto; ',
    passive: 'height:22px; '
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы