【Vue.js】[Vue warn]: Error in v-on handler: "TypeError: handler.apply is not a function

8787 단어 Vue.jsVuetify

소개



Vue.js 및 Vuetify를 사용하여 SPA 애플리케이션을 만드는 동안 다음 오류가 발생했습니다.
[Vue warn]: Error in v-on handler: "TypeError: handler.apply is not a function

여기를 해결하겠습니다.

환경


OS: macOS Catalina 10.15.1
Vue: 2.6.10
vuetify: 2.1.0

무엇을 하고 싶었는가


v-for에서 v-list를 목록 렌더링하고 각 항목에 대해 다음 두 점을 동적으로 변경하고 싶습니다.
  • router-link 목적지
  • v-on 지시어로 발화하는 이벤트

  • 이 2가 잘못되었고 브라우저 콘솔에 제목에있는 오류가 발생했습니다.

    우선은 원래의 코드를 나타냅니다.

    원래 코드



    Sample.vue
    <template>
    <!-- 略 -->
            <v-list>
              <v-list-item
                v-for="item in items"
                :key="item.id"
                @click="item.action"
              >
                <router-link :to="{ name: item.link }">
                  <v-list-item-title>
                    {{ item.name }}
                  </v-list-item-title>
                </router-link>
              </v-list-item>
            </v-list>
    <!-- 略 -->
    </template>
    
    <script>
      export default {
        data() {
          return {
            items: [
              {id: 1, name: '1へのリンク', link: 'Component1', action: ''},
              {id: 2, name: '2へのリンク', link: 'Component2', action: ''},
              {id: 3, name: 'action1を実行', link: '', action: 'action1'},
              {id: 4, name: 'action2を実行', link: '', action: 'action2'},
            ]
          }
        },
        methods: {
          action1() {
            anyAction1()
          },
          action2() {
            anyAction2()
          }
        }
      }
    </script>
    

    이제 router-link는 동적으로 변경되었지만 methods에 정의 된 action1action2가 발화되지 않았습니다.

    다음에 해결한 코드를 나타냅니다.

    해결된 코드(변경부 주변만 발췌)



    Sample.vue
    <template>
    <!-- 略 -->
              <v-list-item
                v-for="item in items"
                :key="item.id"
                @click="triggerClick(item.action)"
              >
    <!-- 略 -->
    </template>
    
    <script>
      export default {
        // 略
        methods: {
          triggerClick(action) {
          if (action === action1) {
            anyAction1()
          } else if (action === action2) {
            anyAction2()
          }
        }
      }
    </script>
    

    개선된 포인트


  • v-list-item@click="triggerClick(item.action)" 및 동적 인수 전달
  • methods 내에서 동적 인수에 따라 발화하는 이벤트의 내용을 변경했습니다

  • 결론



    끝까지 읽어 주셔서 감사합니다

    누군가의 도움이 되길 바랍니다

    참고로 한 사이트 (항상 감사합니다)


  • vue.js - Can't bind v-on:click on Vuetify Vue warn: Error in v-on handler: "TypeError: handler.apply is not a function" - Stack Overflow
  • Subheader @click bug
  • 좋은 웹페이지 즐겨찾기