VueJS - 事件“点击”的无效处理程序:未定义

Posted

技术标签:

【中文标题】VueJS - 事件“点击”的无效处理程序:未定义【英文标题】:VueJS - Invalid handler for event "click": got undefined 【发布时间】:2017-04-04 04:04:31 【问题描述】:

我有点击后想要编辑的元素列表。 我在其他组件中有类似的解决方案,它工作得很好,但在新的组件中却没有,也找不到原因。

当组件被渲染时,我得到: Invalid handler for event "click": got undefined

列表:

<div v-for="annt in anns" class="item two-lines" v-if="!anntInEdit">
          <div class="item-content has-secondary" v-on:click="edit(annt)">
            <div>
               annt.title 
            </div>
            <div >
               annt.body
            </div>
          </div>
          <div class="item-secondary">
          <a><i >delete</i></a>
          </div>
        </div>

JS:

edit (annt) 
        if (this.anntInEdit == null) 
          this.anntInEdit = annt
          this.anntInEditBackup = Object.assign(, this.anntInEdit)
        
        this.anntInEditIndex = this.anns.indexOf(annt)
      ,

当我单击时,我在编辑 snf div 中显示了带有表单的公告,我可以使用保存(ajax)、取消(只需将 inedit 设置为 null)等,但只要我触摸编辑 div 内的任何输入我有: [Vue warn]: Invalid handler for event "click": got undefined vue.common.js?e881:1559 Uncaught (in promise) TypeError: Cannot read property 'invoker' of undefined 一旦出现错误,版本中的任何按钮都无法正常工作。

相同的 div 用于新建/编辑,并且在新建公告时工作得非常好。 有什么想法吗?

整个组件pastebin:http://pastebin.com/JvkGdW6H

【问题讨论】:

可能是一些小错误,最好把整个组件结构贴出来。 整个组件:pastebin.com/JvkGdW6H 【参考方案1】:

我并没有真正关注这个问题,发布一个更完整的示例可能会更好。但是,您似乎需要利用该项目的索引。这应该可以帮助您抓住正确的物品。也就是说,如果单击事件未定义,那么听起来它没有在该组件上注册。

下面的例子可能会有所帮助......

new Vue(
  el: '#app',
  data: 
  	anns: [
    	 state: 'none' ,
       state: 'none' ,
       state: 'none' ,
    ],
  ,
  methods: 
  	edit (index) 
      this.anns[index].state = 'editing'
    ,
  ,
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.8/vue.min.js"></script>
<div id="app">

  <div v-for="(annt, index) in anns">
    <button v-on:click="edit(index)">edit</button>
    <p>state:  annt.state </p>
  </div>

</div>

【讨论】:

是的,如果您在组件中有错误,上述内容将无法修复,更多的是如何重构的示例。如果您发布完整的组件,那么我们可以对其进行故障排除。【参考方案2】:

知道了。这与***功能 @click 无关。 当调用***单击时,正在呈现的元素大约是@click。我在函数名中有拼写错误。 不幸的是,Vue 没有抛出丢失函数的名称,这就是我找不到它的原因,因为我找错了地方......

【讨论】:

【参考方案3】:

我在"@vue/cli-service": "^3.9.0" 中也遇到了这个错误。 原因是需要函数 prop 的子组件没有被传递。

基于此,我建议检查有问题的子组件(如果适用)以确保传递所需的道具:

cancel_action: 
  type: Function,
  required: true
,

【讨论】:

Buena observación, era justo el problema!【参考方案4】:

我刚刚解决了这个问题。可能你把函数名拼错了,注意字母大小写

【讨论】:

【参考方案5】:

当点击函数被实现为计算函数时,我遇到了类似的错误。在函数作为方法而不是计算后,问题得到解决。这不是答案,只是更新我的观察。

【讨论】:

以上是关于VueJS - 事件“点击”的无效处理程序:未定义的主要内容,如果未能解决你的问题,请参考以下文章

高德 ios 自定义气泡添加点击事件无效问题

自定义,发出的事件(处理) - vueJS

尝试在 vuejs 中更新 firebase 文档时,我无法解决此未定义字段问题

jquery on()绑定的点击事件在js动态新添加的元素上无效,请问为啥

Keep Learning Vuejs 2.0 - 基本事件处理

在 SignalR 的事件处理程序中访问属性时始终未定义