simpleVue
  • Simple Vue.js
  • Vue.js 란 ?
  • 01. vue-cli 알아보기
  • 02. Component 구성해보기
  • 03. State 와 Props
  • 04. v-for 를 이용한 리스트 렌더링
  • 05. v-if, v-show 를 이용한 조건부 렌더링
  • 06. Data Binding
  • 07. Computed 와 watch
  • 08. Router
  • 09. Todo - 준비
  • 10. Todo - Read
  • 11. Todo - Create
  • 12. Todo - Remove
  • 13. Todo - Update (상태)
  • 14. Todo - Update (Text)
  • 15. Todo - Filter
  • 16. Vuex
  • 부록
    • Git SSH key 등록
    • VS code + prettier + eslint
Powered by GitBook
On this page
  • 목표
  • 실습

Was this helpful?

12. Todo - Remove

간단한 Todo App 을 만들어봅니다.

Previous11. Todo - CreateNext13. Todo - Update (상태)

Last updated 5 years ago

Was this helpful?

목표

선택된 Todo 를 삭제합니다.

실습

추가된 todo 에 마우스를 올려보시면 x 버튼을 확인 할 수 있습니다. 이 버튼이 눌렸을 경우 해당 todo 를 삭제해야합니다.

삭제를 하기 위해서는 한가지 알아야되는 정보가 있는데 해당 todo 의 고유한 구분 값 입니다. 우리는 그 구분값을 만들어주기 위해 date 를 이용했습니다.

각 todo 에는 고유한 id 값을 가지고 있고 해당 todo 가 선택되었을 경우 그 값을 이용하여 삭제를 합니다.

Create 와 마찬가지로 모든 리스트 데이터를 가지고 있는 App.vue 에 함수를 추가합니다.

remove 함수는 매우 심플합니다. 선택된 id 를 받아 그 id 와 같지 않은 todo 들만 filter 해주면됩니다.

// App.vue

methods: {
    insertTodo(text) {
      // ...
    },
    removeTodo(id) {
      this.todos = this.todos.filter(todo => todo.id !== id);
    }
  }

removeTodo 의 경우 리스트를 그려주는 Todo.vue 에서 이용하고자 합니다.

// App.vue

<template>
  <div id="app">
    <section class="todoapp">
      <Header @insertTodo="insertTodo" />
      <Todo :todos="todos" @removeTodo="removeTodo" />
      <Footer />
    </section>
  </div>
</template>

Todo.vue 에서는 해당 이벤트를 이용하여 선택된 id 값만 넘겨주면됩니다.

클릭된 id 값을 받아 emit 해줄 handleRemove 함수를 추가하겠습니다.

// Todo.vue

export default {
  props: {
    todos: { type: Array, default: () => [] }
  },
  methods: {
    handleRemove(id) {
      this.$emit("removeTodo", id);
    }
  }
};

x 버튼이 눌렸을때 눌린 todo 의 id 를 handleRemove 에게 넘겨 줄 수 있도록 click event 를 걸어줍니다.

<template>
  <section class="main">
    <ul class="todo-list">
      <li
        :class="{todo: true, completed: isDone }"
        v-for="({ id, text, isDone }) in todos"
        :key="id"
      >
        <div class="view">
          <input class="toggle" type="checkbox" :checked="isDone" />
          <label>{{ text }}</label>
          <button class="destroy" @click="handleRemove(id)"></button>
        </div>
        <input class="edit" type="text" />
      </li>
    </ul>
  </section>
</template>

선택된 todo 가 삭제되는 것을 확인 할 수 있습니다.