标为完成练习参考答案

练习一

只需要根据 todo.completed 的状态来条件渲染标为完成的按钮即可,v-if 指令正好派上用场:

<input v-if="!todo.completed" type="button"
       value="标为完成"
       @click="markAsCompleted(todo)"/>

练习二

上述 v-if 语句将已完成的 todo 后的标为完成的按钮隐藏,对应的 else 语句就应该是显示一个标为未完成的按钮,这个按钮和 markAsCompleted 类似,它监听 click 事件并调用 markAsUncompleted 函数,将 todo 的 completed 状态置回 false,从而将已完成的 todo 重新标记为未完成:

<input v-if="!todo.completed" type="button"
       value="标为完成"
       @click="markAsCompleted(todo)"/>
<input v-else type="button"
       value="标为未完成"
       @click="markAsUncompleted(todo)"/>
methods: {
    addTodo: function () {
        this.todos.push(
            // 修改后的 todo 模型
            {id: id++, title: this.newTodoTitle, completed: false}
        );
        this.newTodoTitle = '';
    },
    markAsCompleted: function (todo) {
        todo.completed = true
    },
    markAsUncompleted: function (todo) {
        todo.completed = false
    }
}

-- EOF --


0 条评论 / 0 人参与