상세 컨텐츠

본문 제목

Vue - 미니프로젝트 Todo App 1

Vue

by chloekim66 2022. 7. 19. 13:37

본문

728x90
반응형

새로운 프로젝트를 만들고,

vue create todo

npm run serve하여, 띄워주기.

 

App.vue의 기본내용을 지우고 시작.

 

style은 부트스트랩을 사용할 예정

 

[ 부트스트랩 ]

https://getbootstrap.com/ > cdn (cdd only)복사 > public 폴더의 index.html에

title위에 붙여넣으면 끝

 

App.vue에 기본 todo모양만들기

class로 부트스트랩 style사용

//App.vue

<template>
<div id="app" class="container">
  <h1 class="text-center">Todo App</h1>
  <input type="text" class="w-100 p-2" placeholder="Type todo">
  <hr/>
  <div>
    <input type="checkbox">
    <span class="m-3">Buy a car</span>
  </div>
</div>
</template>

<script>


export default {

}
</script>

 

input에 글을 작성하면, check box부분이 추가되므로,

이부분을 컴포넌트로 만들어보자.

 

components폴더에 Todo.vue생성

//Todo.vue
<template>
  <div>
    <input type="checkbox">
    <span class="m-3">Buy a car</span>
  </div>
</template>
<script>

export  default {

}

</script>

App.vue에 import + 컴포넌트 등록 후 사용

 

App.vue에 data로 todos배열을 넣어보자.

//App.vue

script>
import Todo from '@/components/Todo';

export default {
  components : {
    Todo
  },
  data(){
    return {
      todos: [
        {id: 1, text :'buy a car', checked: false},
        {id: 2, text :'play game', checked: false},
      ]
    }
  }
}
</script>

이 data todos배열을 반복문으로 가져오기.

 

//App.vue 상단
<template>
  <div id="app" class="container">
    <h1 class="text-center">Todo App</h1>
    <input type="text" class="w-100 p-2" placeholder="Type todo">
    <hr/>
   <Todo v-for="todo in todos" :key="todo.id"/>
  </div>
</template>

이렇게 하면 buy a car만 두번나온다. todo.vue의 span부분이 하드코딩 되어있기때문

이 부분을 App.vue > Todo.vue로 props를 보내 해결해보자.

 

1. 받는쪽(Todo)에서 props 설정 

//todo.vue
<template>
  <div>
    <input type="checkbox">
    <span class="m-3">Buy a car</span>
  </div>
</template>
<script>

export  default {
 props:{
   todo:{
     type:Object,
     required : true,
   }
 }
}

</script>

 

2. App.vue에서 props보내주기

//App.vue
<template>
  <div id="app" class="container">
    <h1 class="text-center">Todo App</h1>
    <input type="text" class="w-100 p-2" placeholder="Type todo">
    <hr/>
   <Todo v-for="todo in todos" :key="todo.id" :todo="todo"/>
  </div>
</template>

3. Todo.vue에서 받아서 사용

기존하드코딩된부분을 중괄호 두개열고 변수적기

//todo.vue
<template>
  <div>
    <input type="checkbox" :checked="todo.checked">
    <span class="m-3">{{todo.text}}</span>
  </div>
</template>
<script>

 

 

자 이제 input에 이벤트도 넣어보자.

엔터를 누르면 작동하기위해 keyup.enter사용

//App.vue
    <input
        type="text"
        class="w-100 p-2"
        placeholder="Type todo"
        @keyup.enter="addToDo"
    >

엔터를 누르면, 입력한 todo가 추가되는 addToDo 메소드를 만들어 연결

입력한 값 = e.tartget.value가 text로 들어가고 추가로 id와 checked를 넣어준다.

methods: {
    addToDo(e) {
      this.todos.push({
        id: Math.random(),
        text: e.target.value,
        checked: false
      })
    }
  }

 

화면으로 돌아가 input창에 learn vue.js입력후 엔터를 치면

todo가 추가된다.

 

엔터를 쳐서 추가가되었다면, input비워주기 =>v-model사용

 

input에 v-model을 사용하여, 빈 스트링값을 가진 todoText와 연결

 

//App.vue
  methods: {
    todoText : "",
    addToDo(e) {
      this.todos.push({
        id: Math.random(),
        text: e.target.value,
        checked: false
      });
      this.todoText = '';  //추가 후 다시 초기화
    }
  }

 

 

참고강의 : https://opentutorials.org/course/4091/28138

728x90
반응형

'Vue' 카테고리의 다른 글

Vue - 미니프로젝트 Todo App 2  (0) 2022.07.19
Vue 15 - 라이프사이클  (0) 2022.07.17
Vue 15 - 슬롯(Slot)  (0) 2022.07.15
Vue 14 - 부모 컴포넌트로 보내기(emit)  (0) 2022.07.15
Vue 13 - props  (0) 2022.07.15

관련글 더보기