Если вы не хотите перемещать это в свой собственный компонент, вам понадобится уникальный идентификатор, чтобы показать, какой div в цикле должен быть активным.Ваша текущая настройка не имеет никакого способа узнать, какой div был нажат, и вы просто переключаете один флаг, означающий, что все отображаемые div или ни один из них не отображаются.
Один из способов обойти это -чтобы использовать индекс для цикла foreach
, например,
@foreach($data['a'] as $key => $row)
Тогда для вашего экземпляра vue вы можете получить:
<script>
var vm = new Vue({
el: '#myApp',
data: {
activeKey: null,
},
methods: {
isActive(i) {
return this.activeKey === i;
},
toggleActive(i) {
this.activeKey = this.isActive(i) ? null : i;
}
}
})
</script>
Поскольку логика была немного изменена, вам потребуетсяобновите пару строк в вашем блейд-файле:
<button @click='toggleActive($key)'>Comment</button>
<div v-bind:class="{ noActive: isActive($key) }">
Этот подход подойдет для очень небольшого проекта или проекта, где vue не используется так часто, если это не так, япредложил бы рефакторинг этого компонента вместо.
https://laracasts.com/series/learn-vue-2-step-by-step/episodes/7