猿问

选中通过 v-model 绑定到 false 值的 Vue.js 复选框

我正在尝试使用类似艾森豪威尔矩阵的待办事项列表,但我遇到了一个问题,因为 v-bind 和 v-model 是在 false 上触发的

我该如何修复这个错误?

代码的灵感来自Vue.js Todo App - Basics - Part 1


 <div class="todoList" v-for="(task, index) in todo" :key="task.id">

                    <div>

                        <div v-if="task.type == 'notimportant'">

                            <input v-model="task.completed" type="checkbox" name="" id="" @change="completeTask(task)" />

                            <div class="task" v-bind:class="{ completed: task.completed }">

                                {{ task.title }}

                            </div>

                            <button class="removeTask" @click="removeTask(index)">X</button>

                        </div>

                    </div>

                </div>

export default {

    name: "app",

    data() {

        return {

            newTodo: "",

            type: "",

            important: "",

            id: 3,

            todo: [

                {

                    id: 1,

                    title: "Fist Task",

                    completed: "false",

                    editing: "false",

                    type: "urgent",

                },

                {

                    id: 2,

                    title: "Second Task",

                    completed: "false",

                    editing: "false",

                    type: "important",

                },

            ],

        };

    },


慕神8447489
浏览 201回答 1
1回答

慕丝7291255

问题是你写的是被评估false为的字符串,你应该知道空字符串、值和被评估为,反之亦然"false"true''0nullundefinedfalse在此处了解有关类型强制的更多信息let app = new Vue({&nbsp; el: "#app",&nbsp; data() {&nbsp; &nbsp; return {&nbsp; &nbsp; &nbsp; newTodo: "",&nbsp; &nbsp; &nbsp; type: "",&nbsp; &nbsp; &nbsp; important: "",&nbsp; &nbsp; &nbsp; id: 3,&nbsp; &nbsp; &nbsp; todo: [{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id: 1,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; title: "Fist Task",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; completed: false,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; editing: "false",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: "urgent",&nbsp; &nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id: 2,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; title: "Second Task",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; completed: false,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; editing: "false",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type: "important",&nbsp; &nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; &nbsp; ],&nbsp; &nbsp; };&nbsp; },&nbsp; methods: {&nbsp; &nbsp; addTask() {&nbsp; &nbsp; &nbsp; if (this.newTodo.trim().length == 0) {&nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; this.todo.push({&nbsp; &nbsp; &nbsp; &nbsp; id: this.id,&nbsp; &nbsp; &nbsp; &nbsp; title: this.newTodo,&nbsp; &nbsp; &nbsp; &nbsp; completed: "false",&nbsp; &nbsp; &nbsp; &nbsp; editing: "false",&nbsp; &nbsp; &nbsp; &nbsp; type: this.type,&nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; &nbsp; this.id++;&nbsp; &nbsp; &nbsp; this.newTodo = "";&nbsp; &nbsp; },&nbsp; &nbsp; removeTask(index) {&nbsp; &nbsp; &nbsp; this.todo.splice(index, 1);&nbsp; &nbsp; },&nbsp; &nbsp; completeTask(task) {&nbsp; &nbsp; &nbsp; task.completed = event.target.checked;&nbsp; &nbsp; },&nbsp; },&nbsp; directives: {&nbsp; &nbsp; focus: {&nbsp; &nbsp; &nbsp; inserted: function(el) {&nbsp; &nbsp; &nbsp; &nbsp; el.focus();&nbsp; &nbsp; &nbsp; },&nbsp; &nbsp; },&nbsp; },})* {&nbsp; margin: 0px;&nbsp; box-sizing: border-box;}.removeTask {}.completed {&nbsp; text-decoration: line-through;}.task {&nbsp; text-decoration: 0;}/*.conteiner {&nbsp; &nbsp; display: flex;} /*.todoBox {&nbsp; &nbsp; width: 50%;&nbsp; &nbsp; height: 50vh;&nbsp; &nbsp; border: 1px solid black;&nbsp; &nbsp; text-align: center;}.todoList {&nbsp; &nbsp; width: 100%;&nbsp; &nbsp; height: 100%;&nbsp; &nbsp; border: 1px solid red;}*/<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script><div id="app">&nbsp; <div class="conteiner">&nbsp; &nbsp; <input placeholder="what we do ?" type="text" v-model="newTodo" />&nbsp; &nbsp; <button @click="addTask()">Add</button>&nbsp; &nbsp; <select v-model="type">&nbsp; &nbsp; &nbsp; <option disabled value="">Select</option>&nbsp; &nbsp; &nbsp; <option value="urgent">Urgent</option>&nbsp; &nbsp; &nbsp; <option value="noturgent">Not Urgent</option>&nbsp; &nbsp; &nbsp; <option value="important">Important</option>&nbsp; &nbsp; &nbsp; <option value="notimportant">Not Important</option>&nbsp; &nbsp; </select>&nbsp; &nbsp; <div class="todoBox">&nbsp; &nbsp; &nbsp; <h2>Urgent</h2>&nbsp; &nbsp; &nbsp; <div class="todoList" v-for="(task, index) in todo">&nbsp; &nbsp; &nbsp; &nbsp; <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div v-if="task.type == 'urgent'">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <input v-model="task.completed" type="checkbox" name="" id="" @change="completeTask(task)" />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div class="task" v-bind:class="{ completed: task.completed }">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {{ task.title }}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <button class="removeTask" @click="removeTask(index)">X</button>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; </div>&nbsp; &nbsp; <div class="todoBox">&nbsp; &nbsp; &nbsp; <h2>Not Urgent</h2>&nbsp; &nbsp; &nbsp; <div class="todoList" v-for="(task, index) in todo" :key="task.id">&nbsp; &nbsp; &nbsp; &nbsp; <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div v-if="task.type == 'noturgent'">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <input v-model="task.completed" type="checkbox" name="" id="" @change="completeTask(task)" />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div class="task" v-bind:class="{ completed: task.completed }">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {{ task.title }}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <button class="removeTask" @click="removeTask(index)">X</button>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; </div>&nbsp; &nbsp; <div class="todoBox">&nbsp; &nbsp; &nbsp; <h2>Important</h2>&nbsp; &nbsp; &nbsp; <div class="todoList" v-for="(task, index) in todo" :key="task.id">&nbsp; &nbsp; &nbsp; &nbsp; <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div v-if="task.type == 'important'">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <input v-model="task.completed" type="checkbox" name="" id="" @change="completeTask(task)" />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div class="task" v-bind:class="{ completed: task.completed }">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {{ task.title }}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <button class="removeTask" @click="removeTask(index)">X</button>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; </div>&nbsp; &nbsp; <div class="todoBox">&nbsp; &nbsp; &nbsp; <h2>Not Important</h2>&nbsp; &nbsp; &nbsp; <div class="todoList" v-for="(task, index) in todo" :key="task.id">&nbsp; &nbsp; &nbsp; &nbsp; <div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div v-if="task.type == 'notimportant'">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <input v-model="task.completed" type="checkbox" name="" id="" @change="completeTask(task)" />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <div class="task" v-bind:class="{ completed: task.completed }">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {{ task.title }}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <button class="removeTask" @click="removeTask(index)">X</button>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; &nbsp; </div>&nbsp; &nbsp; </div>&nbsp; </div></div>
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答