Я использую Vue v2
Я пытаюсь изменить только свойства выбранного элемента. Смотрите, когда ответ отмечен после щелчка, он должен измениться на красный цвет с текстом «Снять отметку». И наоборот: если кнопка будет нажата снова (которая теперь будет означать «Снять отметку»), она должна изменить цвет на зеленый, а текст будет «Отметить». Увы, это работает .... Тем не менее, мой код применяет изменения к каждому элементу внутри v-for; Я только хочу, чтобы это случилось с выбранным элементом.
Я думал об использовании Компонента, чтобы проверить, что что-то меняется, но сначала я хотел бы посмотреть, есть ли решения для этого. Любая помощь будет оценена
Вот мой код:
<div class="search-results">
<div class="activity-box-w" v-for="user in users">
<div class="box">
<div class="avatar" :style="{ 'background-image': 'url(' + user.customer.profile_picture + ')' }">
</div>
<div class="info">
<div class="role">
@{{ '@' + user.username }}
</div>
<div>
<div>
<p class="title">@{{ user.customer.name }}
@{{user.customer.lastname}}
</p>
</div>
</div>
</div>
<div class="time">
<input type="button" class="btn btn-sm btn-primary" v-on:click.prevent="markUser(user)" v-model="text"
v-bind:class="[{'green-border':notMarked}, {'red-border':marked}]" v-cloak v-if="!action"
:disabled="action"></input>
</div>
</div>
</div>
Теперь по сценарию:
new Vue({
el: '#engage-panel',
data: {
users: [],
mark: {'id' : '', 'marks' : ''},
text: 'Mark', //Migth change to Unmark later on
action: false,
marked: null,
notMarked: null,
},
methods:
{
markUser: function(user){
this.mark.id = user.id;
this.action= true;
Vue.http.headers.common['X-CSRF-TOKEN'] = $('meta[name="csrf-token"]').attr('content');
this.$http.put('/mark/user', this.mark).then(response => {
if(response.body === "marked")
{
this.mark.marks="true";
this.text = 'Unmark';
this.marked= true;
this.notMarked= false;
this.action= false;
}else{
this.mark.marks="false";
this.text = 'Mark';
this.marked= false;
this.notMarked= true;
this.action= false;
}
}).catch(e => {
this.action= false;
});
}
}