Все ваши функции фильтрации на ongoingTask
и doneTask
неверны, они должны возвращать значение; Посмотрите, как работает функция фильтра: здесь .
Я не уверен, каково предполагаемое поведение continueTaks, но я предполагаю, что следующее должно решить проблему. Пожалуйста, дайте мне знать, и я соответствующим образом обновлю ответ.
// ...
ongoingTask: function () {
this.todos = this.todos.filter(function (el) {
return el.value === false
})
},
doneTask: function () {
this.todos = this.todos.filter(function (el) {
return el.checked
})
},
// ...
EDIT:
Другая часть проблемы была связана с logi c, поскольку как только вы нажмете любую кнопку, которая запускает фильтрацию, данные в состоянии удаляются (например, если я нахожусь в представлении по умолчанию, просматриваю все задачи, когда я нажимаю кнопку «Продолжить», все выполненные TODO в списке удаляется и навсегда теряется!); в идеале вы должны сохранить эти данные и использовать вычисленные свойства для решения проблемы, вот вам рабочий пример (здесь я использую компонент Vue только для того, чтобы собрать все данные в одном месте):
<template>
<div id="app">
<input type="text" v-model="inputTask">
<button @click="addTask">Add</button>
<div>
<button @click="changeFilter('all')">All</button>
<button @click="changeFilter('ongoing')">Ongoing</button>
<button @click="changeFilter('done')">Done</button>
</div>
<ul>
<li v-for="(todo, index) in getTasksList()" :key="{index}">
<input type="checkbox" v-model="todo.done">
<span :class="{done:todo.done}">{{todo.task}}</span>
<button @click="deleteTask(index)">Remove</button>
</li>
</ul>
<p v-show="todos.length===0">Nothing to do</p>
</div>
</template>
<script>
export default {
name: "App",
data: () => ({
inputTask: "",
currentFilter: "ongoing",
todos: [
{ task: "task01", done: false },
{ task: "task02", done: false },
{ task: "task03", done: true },
{ task: "task04", done: true },
{ task: "task05", done: false }
]
}),
computed: {
ongoingTasks: function() {
return this.todos.filter(function(todo) {
return todo.done === false;
});
},
doneTasks: function() {
return this.todos.filter(function(el) {
return el.done;
});
}
},
methods: {
changeFilter(newFilter) {
this.currentFilter = newFilter;
},
addTask: function() {
const todo = { task: this.inputTask, done: false };
this.todos.push(todo);
this.inputTask = "";
},
deleteTask: function(index) {
this.todos.splice(index, 1);
},
getTasksList() {
switch (this.currentFilter) {
case "ongoing":
return this.ongoingTasks;
case "done":
return this.doneTasks;
case "all":
default:
return this.todos;
}
}
}
};
</script>
Надеюсь, это поможет!