完成一:用splice删除
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>todolist</title>
<!-- Latest compiled and minified CSS -->
<link
rel="stylesheet"
href="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css"
/>
</head>
<body>
<div class="container" id="app">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">待办事项</h3>
</div>
<div class="panel-body">
<input
type="text"
class="form-control"
v-model="txt"
placeholder="请输入代办事项"
@keyup="save"
/>
<ul class="list-group">
<li class="list-group-item" v-for="todo in todos" :key="todo.id">
<div class="checkbox">
<label>
<input type="checkbox" v-model="todo.checked" />
{{todo.status===0?'【未完成】':'【已完成】'}}{{todo.content}}
<button
type="button"
@click="todo.status=1"
class="btn btn-info btn-sm"
v-show="todo.status==0"
>
完成
</button>
<button
@click="delOne(todo)"
type="button"
class="btn btn-danger btn-sm"
>
删除
</button>
</label>
</div>
</li>
</ul>
<div class="checkbox">
<label>
<input type="checkbox" v-model="checkAll" />
全选
<button @click="endChecked">完成</button>
</label>
</div>
</div>
</div>
</div>
<script src="./libs/vue.js"></script>
<script>
// { id: 1,content: '起床', status: 0 }
new Vue({
el: "#app",
data: {
txt: "",
todos: [],
},
methods: {
save(e) {
if (e.keyCode === 13) {
this.todos.push({
id: Date.now(),
content: this.txt,
status: 0,
checked: false,
});
this.txt = "";
}
},
delOne(item) {
// var index = ;
this.todos.splice(
this.todos.findIndex((i) => i.id === item.id),
1
);
},
endChecked() {
this.todos
.filter((item) => item.checked)
.forEach((item) => (item.status = 1));
},
},
computed: {
checkAll: {
get() {
if (this.todos.length == 0) {
return false;
}
return (
this.todos.filter((item) => item.checked).length ===
this.todos.length
);
},
set(v) {
this.todos.forEach((item) => (item.checked = v));
},
},
},
});
</script>
</body>
</html>
完成二:用v-if删除
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
</head>
<body>
<!-- html -->
<div id="app" class="container">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">待办事项</h3>
</div>
<div class="panel-body">
<input type="text" class="form-control" placeholder="请输入待办事项" v-model="oneList.txt" @keydown="save">
<ul class="list-group">
<li class="list-group-item" v-for="(item,index) in list" :key="item.id" v-if="item.isIf">
<div class="checkbox">
<label>
<input type="checkbox" v-model="item.checked">
{{item.status==0?'【未完成】':'【已完成】'}} {{item.txt}}
<button @click="item.status=1" type="button" class="btn btn-info btn-sm"
v-show="item.status==0">完成</button>
<button @click="item.isIf=false" type="button" class="btn btn-danger btn-sm">删除</button>
</label>
</div>
</li>
</ul>
<div class="checkbox">
<label>
<input type="checkbox" v-model="checkAll">全选
<button @click="endChecked">完成</button>
</label>
</div>
</div>
</div>
</div>
<!-- js -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.js"></script>
<script>
new Vue({
el: '#app',
data: {
oneList: {
id: Date.now(),
txt: '',
isIf: true,
status: 0,
checked: false,
},
list: [],
},
methods: {
save(e) {
if (e.keyCode == 13) {
this.list.push({
...this.oneList
});
}
this.oneList.txt = "";
},
endChecked() {
this.list
.filter(item => item.checked)
.forEach(item => item.status = 1);
},
},
computed: {
checkAll: {
set(v) {
this.list.forEach(item => item.checked = v);
},
get() {
if (this.list.length == 0) {
return false;
}
return this.list.length === this.list.filter(item => item.checked).length;
},
},
},
});
</script>
</body>
</html>
写法一(没有全选完成)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- Latest compiled and minified CSS & JS -->
<link rel="stylesheet" media="screen" href="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<style>
.form2 {
border: 1px solid rgb(214, 211, 211);
border-radius: 5px;
height: 60px;
line-height: 60px;
padding-left: 6px;
}
.form2 button {
margin-top: -4px;
}
.form2 span {
margin: 0 5px;
}
</style>
</head>
<body>
<!-- html -->
<div class="container" id="app">
<!-- <form action="" method="POST" role="form"> -->
<legend>今日任务完成情况</legend>
<div class="form-group">
<label for="">事项</label>
<input type="text" class="form-control" id="" placeholder="输入代办内容" v-model="oneList.txt" required>
</div>
<button type="submit" class="btn btn-primary" id="btnSub" @click="btnSub">提交</button>
<!-- </form> -->
<div class="form-inline form2" v-for="(item,index) in list" :key="index" v-if="item.isIf">
<div v-if="item.isIf">
<div class="form-group">
<span>{{item.status}}</span>
<span>{{item.txt}}</span>
</div>
<button type="submit" class="btn btn-default" v-show="item.isShow" @click="finishBtn(item)">完成</button>
<button type="submit" class="btn btn-default" @click="deleteBtn(item)">删除</button>
</div>
</div>
</div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.js"></script>
<script>
new Vue({
el: '#app',
data: {
// status: "【未完成】",
// txt: '',
// isShow: true,
// isIf: false,
oneList: {
status: "【未完成】",
txt: '',
isShow: true,
isIf: true,
},
list: [],
},
methods: {
btnSub() {
this.list.push({
...this.oneList
});
this.oneList.txt = '';
},
finishBtn(item) {
item.status = '【已完成】';
item.isShow = false;
},
deleteBtn(item) {
item.isIf = false;
},
},
});
</script>
</body>
</html>
写法二(没有全选完成)
@keyup.enter=“函数名”
<style>
h6{
font-size: 18px;
margin: 0;
}
</style>
</head>
<body>
<div id="app">
<h6>事项</h6>
<input type="text" placeholder="请输入代办内容" v-model="txt" @keyup.enter="tijiao"/>
<br>
<input type="button" @click="tijiao" value="提交"/>
<ul>
<li v-for="(item,index) in list" :key="index">
<span>{{item.txtstau}}</span>
<span>{{item.txt}}</span>
<!-- <button @click="item.status=true" v-show="!item.status"></button> -->
<input type="button" value="完成" v-show="item.isShow" @click="wancheng(index,item)" />
<input type="button" value="删除" @click="del(index)" />
</li>
</ul>
</div>
</div>
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.js"></script>
<!-- <script src="./libs/vue.js"></script> -->
<script>
new Vue({
el: "#app",
data: {
txt: "",
list: [],
},
methods: {
tijiao() {
this.list.push({
id: new Date() * 1,
txtstau: "【未完成】",
txt: this.txt,
isShow:true,
});
this.txt="";
},
wancheng(index,item){
console.log(item);
item.txtstau = "【完成】";
item.isShow = false;
},
del(index){
this.list.splice(index, 1);
}
},
});
</script>在这里插入代码片
写法三(超全 全选完成删除)
@keyup=“函数名” 里面用e.keyCode==13
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
<style>
ul,
li {
list-style: none;
}
table {
margin-top: 3rem;
}
td,
th {
text-align: center;
}
button {
outline: none;
}
</style>
</head>
<body>
<div class="container" id="app">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title">toDoList练习</h3>
</div>
<div class="panel-body">
<input type="text" class="form-control" @keyup.enter="addData" v-model='iptVal'>
<table class="table table-hover table-bordered">
<thead>
<tr>
<th><input type="checkbox" v-model='allChecked'>序号</th>
<th>待完成事件</th>
<th>完成状态</th>
<th>操作(不完成不能删除)</th>
</tr>
</thead>
<tbody>
<tr v-for='(item, key) in msg'>
<td :style="item.style"><input type="checkbox" v-model='item.checked'>{{key+1}}</td>
<td :style="item.style">{{item.event}}</td>
<td :style="item.style">{{!item.bool1 ? "已完成" : "未完成"}}</td>
<td>
<!-- v-show为假时隐藏标签 -->
<button type="button" class="btn btn-success"
@click="changeStyle(item, 'yellow', false)" v-show='item.bool1'>完成</button>
<button type="button" class="btn btn-warning" @click="msg.splice(key,1)"
:disabled="item.bool1==true?true:false">删除</button>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>
<button type="button" class="btn btn-success" @click="allSucess()">全部完成</button>
</td>
<td>
<button type="button" class="btn btn-warning" @click="delCompleted">删除已完成</button>
</td>
<td>
<button type="button" class="btn btn-danger" @click="allDel">全部删除</button>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
let app = new Vue({
el: '#app',
data: {
iptVal: "",
msg: [],
},
methods: {
// 添加数据
addData: function () {
let obj = {};
obj.id = this.msg.length + 1;
obj.event = this.iptVal;
// 用来判断是否选中
obj.checked = false;
// 用来判断是否完成
obj.bool1 = true;
this.msg.push(obj);
},
changeStyle(item, color, bool1) {
item.style = {
// color: color,
backgroundColor: color,
}
item.bool1 = bool1;
},
// 全部完成
allSucess() {
this.msg.forEach((item) => {
if (item.checked) {
this.changeStyle(item, "yellow", false);
}
})
},
// 删除已完成
delCompleted() {
this.msg = this.msg.filter((item) => item.bool1 === true);
},
// 删除所有,不管有没有完成的
allDel() {
this.msg.splice(0);
}
},
// 计算属性
computed: {
allChecked: {
set(val) {
console.log(val);
this.msg.forEach((item) => { item.checked = val });
},
get() {
return (this.msg.filter((item) => { return item.checked }).length === this.msg.length);
}
},
}
})
</script>
</body>
</html>