mongodb - 单击检查按钮时如何更改vue的状态
问题描述
我正在使用 Vue.js、Express.js 和 MongoDB 创建一个 Todo 应用程序。
我想通过复选框更改显示为 v-for 的字段的状态。
我想要的代码是在选中复选框时更改文本的状态,并使用 v-if 显示另一个元素。
这是我写的代码: 但它不起作用。
如果我有错误的代码,请帮助我。
列表组件
<template>
<div class="todos">
<div v-for="todo in todos" v-bind:key="todo._id" class="todo">
<div>
<input type="checkbox" v-model="todo.done" v-on:click="completeTodo(todo)">
<del v-if="todo.done">{{todo.title}}</del>
<strong v-else>{{todo.title}}</strong>
</div>
</div>
</div>
</template>
<script>
export default {
data () {
return {
todos: {}
}
},
created () {
this.$http.get('/api/todos')
.then((response) => {
this.todos= response.data
})
},
methods: {
completeTodo (todo) {
todo.done = !todo.done
}
}
}
</script>
解决方案
你不需要v-on:click="completeTodo(todo)"
。v-model
已经在为您解决问题了。此外,todos
您的代码中的 应该被定义和实例化为数组而不是对象。
v-model
用于双向数据绑定。这意味着,在这种情况下,您从代码传递的任何数据都将绑定到复选框值,并且无论何时从 UI 进行更改并且用户更改了复选框的值,都会在 v-model 变量中捕获。v-model 在复选框的情况下是 :value prop 和 @change 事件的组合,因此,它能够以两种方式更新数据。
请参考这个片段。
var app = new Vue({
el: '#app',
data: {
todos: [
{
id: 1,
title: 'Study',
done: false
},
{
id: 2,
title: 'Work',
done: false
},
{
id: 3,
title: 'Play',
done: false
}
]
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div class="todos">
<div v-for="todo in todos" :key="todo.id">
<div>
<input type="checkbox" v-model="todo.done"/>
<del v-if="todo.done">{{todo.title}}</del>
<strong v-else>{{todo.title}}</strong>
</div>
</div>
</div>
</div>
推荐阅读
- c# - 正则表达式只接受小数和数字,包括零点小数并限制 0
- sql-server - 如何在 SQL Server 中的每个拆分项上获取带引号的拆分字符串?
- matlab - “double”类型的输入参数的未定义函数“imgaussfilt”
- javascript - 使用 Ramda 或 vanillaJS 将任意深度嵌套的值转换为对象键
- android - 部分用户从 google play store 安装后无法打开我的应用程序,如何检查原因?
- python - 阻止 Tab 键
- node.js - selenium driver.findElements() 返回一个 promise 而不是 element
- java - 如何在我的应用程序中共享 apk 文件(共享同一应用程序的 apk 文件)
- javascript - 根据用户输入值显示 DIV 元素之一
- reactjs - 在新 CRA 中使用 babel 转译包后 CSS 和图像文件未出现