inflearn logo
강의

講義

知識共有

Vue.js 中級講座 - Webアプリ制作で学ぶVue.js、ES6、Vuex

TodoList.vue에서 삭제 처리를 위한 emit이 작동하지 않습니다.

解決済みの質問

565

lachesisxj7405

投稿した質問数 6

1

TodoList.vue에서 removeBtn으로 removeTodo함수를 호출하면서 부모창으로 emit을 요청했지만

app.vue에서 콘솔로그를 출력해봤을때 해당 함수를 호출이 안되는데, 원인이 뭔지를 모르겠습니다.

강의 내용대로 입력했는데, 해당 기능이 수행되지 않고 있습니다.

 

localhost:8080 으로 접속했을 때 아래와 같은 오류가 뜹니다.

app.vue소스에서 methods 영역에 아래와 같이 선언했는데 못찾는 이유가 무엇인가요?

removeOneItem: function(todoItem){

에러메시지 -

main.js:4 [Vue warn]: Property "removeOneItem" was accessed during render but is not defined on instance.

at <App>

 

 

TodoList.vue

<template>
  <div>
    <ul>
        <li v-for="(todoItem , index) in propsdata" v-bind:key="todoItem.item"
            class="shadow">
            <i class="checkBtn fa-solid fa-check"  v-bind:class="{checkBtnCompleted: todoItem.completed}" v-on:click="toggleComplete(todoItem, index)"></i>
            <span v-blind:class="{textCompleted: todoItem.completed}">{{ todoItem.item }}</span>
            <span class="removeBtn" v-on:click="removeTodo(todoItem, index)">
                <i class="fa-solid fa-trash"></i>
            </span>
        </li>
    </ul>
  </div>
</template>


<script>
export default {
    props:['propsdata'], 

     methods: {
        removeTodo : function(todoItem, index){
            this.$emit('removeItem', todoItem, index);
        },
        toggleComplete: function(todoItem, index){
            console.log(todoItem.item + " " + index);
            todoItem.completed = !todoItem.completed;
            localStorage.removeItem(todoItem.item);
            localStorage.setItem(todoItem, JSON.stringify(todoItem));


        }
    }

}
</script>

app.vue

<template>
  <div ip="app">
    <TodoHeader></TodoHeader>
    <TodoInput v-on:addTodoItem="addOneItem"></TodoInput>
    <!-- <TodoInput v-on:하위 컴포넌트에서 발생시킨 이벤트 이름="현재 컴포넌트 매소드명"></TodoInput> -->
    <TodoList v-bind:propsdata="todoItems" v-on:removeItem="removeOneItem"></TodoList>
    <!-- <TodoList v-bind:propsdata="todoItems"></TodoList> -->
    <!-- <TodoList v-bind:내려보낼 프롭스 속성 이름="현재 위치의 컴포넌트 데이터 속성"></TodoList> -->
    <TodoFooter></TodoFooter>
  </div>
</template>

<script>
import TodoHeader from './components/TodoHeader.vue'
import TodoInput from './components/TodoInput.vue'
import TodoList from './components/TodoList.vue'
import TodoFooter from './components/TodoFooter.vue'

export default {
  data: function(){
    return {
      todoItems:[]
    }
  },
  methods:{
    addOneItem: function(todoItem){

      console.log("addOneItem:[" + todoItem + "]");

      var obj = { completed : false, item: todoItem };
      // console.log(this.newTodoItem);
      //저장하는 로직
      localStorage.setItem(todoItem,JSON.stringify(obj));
      this.todoItems.push(obj);
    }
  },
  removeOneItem: function(todoItem){

    // console.log("removeOneItem app remove items:[" + index + "]:" + todoItem.item);
    console.log("removeOneItem app remove items:[:" + todoItem.item);
    localStorage.removeItem(todoItem.item);
    // this.todoItems.splice(index, 1);

  },

javascript vue.js es6 vuex

回答 2

1

lachesisxj7405

그런데 프로그램 수정 후

아래와 같은 warn이 뜨면서 기존에 등록해놓았던 localStorage에 있는 데이터가 뜨지 않는데 이유가 뭔가요?

[Vue warn]: Failed to resolve directive: blind

at <TodoList propsdata= [] onToggleItem=fn<bound toggleOneItem> onRemoveItem=fn<bound removeOneItem> >

at <App>

 

1

lachesisxj7405

자답입니다. methods 부분에서 addOneItem 이후 괄호를 종료해버려서 methods내에서 찾을 수 없었네요. methods 들을 다 감싼 후 실행하니 동작합니다.

methods:{
    addOneItem: function(todoItem){

      console.log("addOneItem:[" + todoItem + "]");

      var obj = { completed : false, item: todoItem };
      // console.log(this.newTodoItem);
      //저장하는 로직
      localStorage.setItem(todoItem,JSON.stringify(obj));
      this.todoItems.push(obj);
    }
   , removeOneItem: function(todoItem){

    // console.log("removeOneItem app remove items:[" + index + "]:" + todoItem.item);
    console.log("removeOneItem app remove items:[:" + todoItem.item);
    localStorage.removeItem(todoItem.item);
    // this.todoItems.splice(index, 1);

  }
}

0

captain

네 저도 본문에 첨부해 주신 내용 보니 메서드 밖에 선언하신거 같더라구요. 고생하셨습니다 :)

 

image

Chrome 개발자 모드 확장이 안됨

0

251

1

깃 권한 요청드립니다

0

118

1

vue.js 중급 리포지토리 권한 관련

0

118

1

vuex + axios 질문 있습니다!

1

198

2

깃 권한 요청드립니다!

0

161

1

강의 깃주소 문의

0

142

1

router-view에 props를 어떻게 넘길 수 있나요?

1

278

2

Vue가 인식되지 않는 현상

0

205

1

기초강좌는 어디있나요?

1

190

2

App.vue가 필요한 이유

0

192

1

getter가 정의되어 있지 않아 오류가 발생합니다.

1

253

1

뷰 라이프사이클

1

187

1

TSLint 말고 TSLint Vue 설치해도 되나요?

1

367

3

로컬 스토리지는 어디에 있나요?

1

279

1

vuex 실행시 새로고침해야지만 리스트에 나타나는 현상

1

387

2

export default 관련한 질문

0

354

2

깃허브 vue-todo 접근불가에 따른 확인요청

1

354

2

깃허브에 문제있는것 같습니다.

1

273

2

인프런 강의 재생 화면 구성 변경 문의드립니다

1

302

2

addTodo Helper 함수 적용

1

242

1

vuex 헬퍼 전역 설정

1

244

2

github 권한요청드립니다.

1

255

2

이벤트 위치에 대한 궁금증 입니다.

1

220

2

구조 차이에 대한 문의

1

343

2