Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
142
rated 0 times [  148] [ 6]  / answers: 1 / hits: 39674  / 6 Years ago, fri, april 6, 2018, 12:00:00

I want to change the status of Tasks when a particular method is called. But The problem is I cannot get the index of the particular item of the array to change its status.
This is my HTML:



<div class=main id=my-vue-app>
<ul>
<li v-for=task in completeTask>
{{ task.description }} <button @click=markIncomplete>Mark as Incomplete</button>
</li>

</ul>
<ul>
<li v-for=task in incompleteTask>
{{ task.description }} <button @click=markComplete>Mark as Complete</button>

</li>
</ul>
</div>


And this is my Vue:



<script>
new Vue(
{
el: '#my-vue-app',
data:
{
tasks: [
{description:'go to market', status: true},
{description:'buy book', status: true},
{description:'eat biriani', status: true},
{description:'walk half kilo', status: false},
{description:'eat icecream', status: false},
{description:'return to home', status: false}
]
},
computed:
{
incompleteTask()
{
return this.tasks.filter(task => ! task.status);
},
completeTask()
{
return this.tasks.filter(task => task.status);
}
},
methods:
{
markComplete()
{
return this.task.status = true;

},
markIncomplete()
{
return this.task.status = false;
}
}
}
)
</script>


I need make use of markComplete() and markIncomplete() but the problem is I couldn't find the way to get the index of current element to change its status.


More From » arrays

 Answers
29

You could get the index by declaring a second argument at the v-for:


<li v-for="(task, index) in incompleteTask">
{{ task.description }} <button @click="markComplete(index)">Mark as Complete</button>
</li>

    methods: 
{
markComplete(index)
{
return this.tasks[index].status = true;

},



But a, maybe simpler, alternative is to simply **pass the `task` as argument**:
<li v-for="task in incompleteTask">
{{ task.description }} <button @click="markComplete(task)">Mark as Complete</button>
</li>

    methods: 
{
markComplete(task)
{
return task.status = true;

},

[#54739] Wednesday, April 4, 2018, 6 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
zachariaho

Total Points: 34
Total Questions: 87
Total Answers: 100

Location: England
Member since Tue, Sep 8, 2020
4 Years ago
;