반응형
<ul class="list-group "
v-for="(i,index) in todolist"
v-bind:key="i.id">
<li class="list-group-item d-flex align-items-center mt-2">
<div class="form-check flex-grow-1">
<input class="CheckInput"
v-model="i.isdone"
type="checkbox">
<label class="checkLabel"
:class="{todoStyle:i.isdone}"
>{{i.sbj}} </label>
</div>
<div>
<button class= "btn btn-danger btn-sm"
@click="deleteitem(index)">삭제</button>
</div>
</li>
</ul>
v-for에서 todolist 배열의 값을 i로 가져올때 index를 생성하여 번호를 붙인다
아래 버튼에서 @click(v-on:click) deleteTodo함수를 호출할때 index를 매개변수로 보내고
var deleteitem=(index)=>{
console.log(index)
}
콘솔로그로 먼저 index의 값이 잘 증가하나 확인한다
각 li안에 잘 적용이 된 모습을 볼 수 있다
자바스크립트의 splice 함수는 원본 배열에 새로운 요소를 추가하거나 기존요소를 삭제 또는 교체하여 원본 배열을 변경 하고 제거된 배열을 반환한다
arr.splce(start,deleteCount,[add1],[add2]...)
var deleteitem=(index)=>{
// console.log(index)
todolist.value.splice(index,1)
}
todolist배열의 value값을 index에서 시작하여 한개를 삭제한다
- v-if 사용 예제
<div v-if="!todolist.length">
<b>오늘은 갓백수의 삶을 꿈꾸시나용..?</b>
</div>
전체 코드
<template>
<div class ="container">
<h1>TodoList</h1>
<form
@submit.prevent="Submit"
class="d-flex">
<div class="flex-grow-1 ">
<input class="form-control "
type="text"
v-model="todo"
placeholder="할일"
>
</div>
<div >
<button class="btn btn-primary">
추가
</button>
</div>
</form>
<ul class="list-group "
v-for="(i,index) in todolist"
v-bind:key="i.id">
<li class="list-group-item d-flex align-items-center mt-2">
<div class="form-check flex-grow-1">
<input class="CheckInput"
v-model="i.isdone"
type="checkbox">
<label class="checkLabel"
:class="{todoStyle:i.isdone}"
>{{i.sbj}} </label>
</div>
<div>
<button class= "btn btn-danger btn-sm"
@click="deleteitem(index)">삭제</button>
</div>
</li>
</ul>
<div v-if="!todolist.length">
<b>오늘은 갓백수의 삶을 꿈꾸시나용..?</b>
</div>
</div>
</template>
<script>
import {ref} from 'vue'
export default {
setup()
{
let todo= ref("");
let todolist = ref([ ]);
let todoStyle={
textDecoration:'line-through',
color:'gray'
}
var Submit = ()=>{
todolist.value.push({
id: Date.now(),
sbj:todo.value,
isdone : false,
});
todo.value="";
}
var deleteitem=(index)=>{
// console.log(index)
todolist.value.splice(index,1)
}
return {
todo,Submit,todolist,todoStyle,deleteitem,
};
}
}
</script>
<style>
.todoStyle{
color:red;
text-decoration: line-through;
}
</style>
반응형
'FrontEnd > Vue3' 카테고리의 다른 글
Vue3 To do list 만들기 (5) 데이터 emit (자식 컴포넌트 ->부모 컴포넌트) (0) | 2022.06.21 |
---|---|
Vue3 컴포넌트 만들기 (0) | 2022.06.21 |
Vue3 To do list 만들기 (3) class , style binding (0) | 2022.06.21 |
Vue3 To do list 만들기 (2) (0) | 2022.06.21 |
Vue3 To do list 만들기 (1) (0) | 2022.06.21 |