TIL | Vue 06일 (Todo App 프로젝트 시작, 할 일 목록 뿌리기)

space's pace·2022년 9월 27일
0

Vue

목록 보기
6/9

앞서 써왔던 게시글에선 vue3 로 프로젝트를 생성했지만...회사에서 쓰고 있는건 2 버전이므로,
지금부터는 Vue2 버전에서 생성된 프로젝트라고 보면 된다.

Vue 2 Todo App 프로젝트 시작

프로젝트 생성 후 보일러플레이트

src - components 폴더 생성하고 폴더 안에 사용할 컴포넌트를 등록하면 된다.

컴포넌트 안에서 만들 컴포넌트 목록 [header, input, list, footer]

다시 App.vue 에 와서 import를 통해 컴포넌트를 등록한다.

template - html 영역

style 영역에는 scoped 라는 속성이 있는데 이 해당 컴포넌트에서만 스타일을 사용하겠다는 뜻이다.

TodoInput.vue

input 박스 안에 입력되는 값들이 맵핑이 되서 뷰 인스턴스 안에 나타나게 해주려면
v-model 디렉티브를 특정 data 속성과 연결시켜줘야 한다.

newTodoItem을 v-model로 연동시켜주면 input에 입력한 값이 실시간으로 반영된다.

methods에는 내가 쓸 함수를 등록한다.
input 박스 안에 내가 쓴 값을 저장하는 로직을 넣고 add 버튼을 클릭시 값을 input 박스의 값을 비워준다.

이때 저장은 localStorage.setItem() 이라는 API를 사용해 로컬스토리지에 저장할 거임(로컬스토리지에 key, value 형태로 저장된다)

addTodo 안에 input 의 텍스트를 비워주는 메서드를 clearInput 이라는 이름으로 분할해준다.
this.clearInput()을 써서 인풋값에 접근한다.

v-on:keyup.enter="addTodo"
= 엔터를 누르면 addTodo를 실행해줘

TodoList.vue

가장 먼저 vue 라이프사이클 중 created 라는 컴포넌트가 생성되자마자 실행되는 라이프사이클 훅을 써준다.

컴포넌트가 생성되자마자 localStorage의 data를 담아서 todoItems 라는 데이터에 연결 -> 화면에 뿌려주기만 하면 됌

<li v-for="(todoItem, index) in todoItems" v-bind:key="todoItem" >

todoItems 라는 배열 안에서 todoItem 이라는 숫자만큼 돌겠다 (반복문)
이때 index는 todoItem 의 순서를 가리킨다.
우리가 원하는 건 리스트 각각의 휴지통 모양의 아이콘을 클릭했을 때
리스트가 제거되어야 한다.
v-on:click="removeTodo(todoItem, index)"
내가 선택한 리스트의 순서를 알려면 todoItem 뿐만 아니라, index까지 넘겨줘야 한다.

methods: {
  removeTodo: function(todoItem, index) {
    // 로컬스토리지에 저장된 아이템 제거
    localStorage.removeItem(todoItem);
    // 데이터베이스에서는 지워졌지만 화면엔 반영x 따로 처리해야함
    // 자바스크립트 배열 API - splice 사용
    this.todoItems.splice(index, 1)
    // 특정 index에서 하나를 지울거다!
  }
}

<완성된 모습>

profile
블로그 이사 준비중!

0개의 댓글