Vue.js 기초 3
Todo list 만들기
시작하기 전에 앞서 Vue.js cdn을 포함해주세요
<!-- 개발버전, 도움되는 콘솔 경고를 포함. -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
or
<!-- 상용버전, 속도와 용량이 최적화됨. -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
cli 설치 후 todo list 만들기
<template>
<div id="app">
<div class="container">
<div class="col-md-6 offset-md-3">
<h1 class="text-center mb-4">TODO 어플리케이션</h1>
<input type="text" class="form-control mb-4" v-model="userInput" @keyup.enter="addNewTodo">
<div class="list-group mb-4">
<button class="list-group-item text-left" v-for="todo in activeTodoList" v-bind:key="todo" @click="toggleTodoState(todo)">
</button>
</div>
<div class="text-right">
<button type="button" class="btn btn-sm" @click="changeCurrentState('active')">할 일</button>
<button type="button" class="btn btn-sm" @click="changeCurrentState('done')">완료</button>
<button type="button" class="btn btn-sm" @click="changeCurrentState('all')">전체</button>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
//list에 저장된 목록을 button으로 출력하는 for문
// v-for에서 에러가 나는 경우 버전 차이 때문이므로 끝에 v-bind:key="todo"를 추가해주세요
name: 'app',
data(){
return {
userInput: '', //사용자 입력값
todoList:[], //사용자가 입력한 값을 저장할 배열
currentState: 'active'
};
},
//computed 클래스의 getter함수와 작동이 유사하다
computed:{ //computed 안에 넣는 경우 html 코드 내에서 변수처럼 사용 가능하다
activeTodoList(){//filter함수로 'active' 상태인 button만 남김
return this.todoList.filter(todo=> this.currentState === 'all' || todo.state === this.currentState);
//currentState 경우가 all인 경우 모두 가져오고 아닌경우 'active'인 값 만 가져옴
}
},
methods:{
changeCurrentState(state){//상태 변경을 할 메소드
this.currentState = state;
},
addNewTodo(){//enter를 눌렀을 때 해당 text를 초기화 하는 메소드
this.todoList.push({
label:this.userInput,
state:'active'//완료/미완료를 체크하는 상태변수
}); //사용자 입력값을 todoList에 추가(json형식)
//vue에서는 json값을 화면에 출력할 경우 string형식으로 바꿔서 출력시켜준다.
this.userInput ='';//추가한 후에 userInput값을 초기화 시킴
},
//버튼 클릭시 상태값을 변경할 method
toggleTodoState(todo){ //todo:클릭한 함수를 받을 메소드
todo.state = todo.state == 'active' ? 'done' : 'active'; //클릭으로 done / active를 표현
}
},
components: {
}
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>