코드공부방

Vue.js To Do List 만들기 #3 컴포넌트 구현(2) 본문

웹프로그래머/vue.js

Vue.js To Do List 만들기 #3 컴포넌트 구현(2)

:- ) 2019. 9. 5. 21:16
반응형

Vue.js To Do List 만들기 #3 컴포넌트 구현(2)


컴포넌트 생성 및 등록(2)

컴포넌트 구현 > TodoList

TodoList컴포넌트는 localStorage에 저장되어있는 item 목록을 화면에 보여주는 역할을 한다. 순서가 없는 목록은 ul, li 요소를 사용한다. 먼저 localStorage에 저장되어있는 목록을 vue 데이터 todoItems에 저장한다. 

/* /src/components/TodoList.vue > <script></script> */

export default {
    data(){
        return {
            todoItems: []
        }
    },
    created(){
        if(localStorage.length > 0){
            for(var i = 0; i < localStorage.length; i++){
                this.todoItems.push(localStorage.key(i));
            }
        }
    }
}
created()는 라이프사이클 단계 중 data속성과 methods속성이 정의된 후 실행되는 단계이다.

다음으로 v-for디렉티브를 사용하여 todoItems의 목록만큼 반복하여 <li> 태그를 출력한다.

<!-- /src/components/TodoList.vue > <template></template> -->

<section>
    <ul>
        <li v-for="todoItem in todoItems">{{ todoItem }}</li>
    </ul>
</section>

localStorage에 있는 목록이 화면에 출력됐다.

내가 저장한 할일 목록이 잘 출력됐다. 그런데 뭔가 불편하다. 할일을 추가하면 localStorage에는 저장이 되는데 화면에는 새로고침을 해야만 출력이 되고 있다.

 

새로고침을 해야만 할일 목록이 갱신된다.

이 문제는 나중에 다시 수정하기로 하고 삭제 기능을 먼저 추가한다. 삭제기능을 추가하기 위하여 먼저 <li> 태그내에 삭제 버튼을 추가하고, 버튼을 클릭했을때 삭제 기능(removeTodo메소드)이 실행되도록 클릭 이벤트를 추가한다.

 

<!-- /src/components/TodoList.vue > <template></template> -->

<section>
    <ul>
        <li v-for="todoItem in todoItems">
            {{ todoItem }}
            <button v-on:click="removeTodo">삭제</button>
        </li>
    </ul>
</section>
/* /src/components/TodoList.vue > <script></script> */

export default {
    data(){
        return {
            todoItems: []
        }
    },
    created(){
        if(localStorage.length > 0){
            for(var i = 0; i < localStorage.length; i++){
                this.todoItems.push(localStorage.key(i));
            }
        }
    },
    methods: {
    	removeTodo(){
        	//삭제기능
        }
    }
}

삭제 버튼을 클릭했을때 선택된 할 일의 텍스트 값과 인덱스를 가져오기 위하여 template 코드와 removeTodo메소드를 수정한다. 할 일 목록의 index는 vue에서 내부적으로 관리하고 있다.

<!-- /src/components/TodoList.vue > <template></template> -->

<section>
    <ul>
        <li v-for="(todoItem, index) in todoItems" :key="todoItem">
            {{ todoItem }}
            <button v-on:click="removeTodo(todoItem, index)">삭제</button>
        </li>
    </ul>
</section>
/* /src/components/TodoList.vue > <script></script> */

export default {
    data(){
        return {
            todoItems: []
        }
    },
    created(){
        if(localStorage.length > 0){
            for(var i = 0; i < localStorage.length; i++){
                this.todoItems.push(localStorage.key(i));
            }
        }
    },
    methods: {
    	removeTodo(todoItem, index){
            console.log(todoItem, index);
        }
    }
}

내가 삭제하고자 하는 할 일의 내용과 index값이 console창에 출력되는지 확인한다.

 

삭제버튼을 클릭하면 선택한 아이템의 내용과 index가 콘솔에 출력된다.

선택한 아이템의 index를 알았으니 이제 localStorage와 vue데이터에서 선택한 아이템을 삭제하기 위하여 removeTodo메소드를 수정한다.

/* /src/components/TodoList.vue > <script></script> */

export default {
    data(){
        return {
            todoItems: []
        }
    },
    created(){
        if(localStorage.length > 0){
            for(var i = 0; i < localStorage.length; i++){
                this.todoItems.push(localStorage.key(i));
            }
        }
    },
    methods: {
    	removeTodo(todoItem, index){
            localStorage.removeItem(todoItem);
            //splice()는 첫번째 인자값(index)로부터 두번째 인자값(1)만큼을 삭제한다.
            this.todoItems.splice(index, 1);
        }
    }    
}

vue데이터와 localStorage에서 선택한 아이템이 삭제된다.

여기서 마무리 하고 다음 포스팅에서는 전체 삭제하기 버튼이 들어가는 TodoFooter컴포넌트를 구현 할 예정이다.

 

(계속..)

 

2019/09/05 - [vue.js] - Vue.js To Do List 만들기 #2 컴포넌트 구현(1)

 

Vue.js To Do List 만들기 #2 컴포넌트 구현(1)

Vue.js To Do List 만들기 #2 컴포넌트 구현(1) 컴포넌트 생성 및 등록(1) 프로젝트 초기 구성을 완료하였으니 애플리케이션에 필요한 컴포넌트들을 생성하고 등록한다. To Do List에 필요한 컴포넌트는 TodoHeade..

code-study.tistory.com

2019/09/05 - [vue.js] - Vue.js To Do List 만들기 #1 프로젝트 생성

 

Vue.js To Do List 만들기 #1 프로젝트 생성

Vue.js To Do List 만들기 #1 프로젝트 생성 난 이미 포스팅을 하기 전 책을 보고 한번 쭉 따라 만들어보았다. 지겨운 To Do List 이다. 구글에 "Vuejs to do list" 라고 검색하면 수많은 검색결과가 나온다. 그..

code-study.tistory.com

2019/07/24 - [vue.js] - vue.js 입문

 

vue.js 입문

웹퍼블리싱만을 할 줄 아는 것(html, css를 사용하여 레이아웃을 만들고 jQuery로 동적UI 구현)으로는 더이상 큰 경쟁력이 없다. 아마도 2018년부터 웹퍼블리셔 구인시장을 봤다면 누구나 공감할 것이다. 신입 웹..

code-study.tistory.com

 

반응형
Comments