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>