You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nuxt.js中Vuetify下拉按钮点击报handler.apply错误如何解决?

错误原因

你为@click绑定的item.to是字符串类型的'print()',并非可执行的函数对象。Vue的事件绑定逻辑要求@click接收的参数是函数引用,触发事件时Vue内部会尝试调用handler.apply()执行回调,而字符串不存在apply方法,因此抛出该类型错误。

另外你的代码还存在一个隐含问题:组件的data选项不能使用箭头函数声明,箭头函数的this指向外层作用域而非组件实例,会导致无法正常获取组件的methods、props等属性。

能否直接通过字符串形式调用函数

不能直接将带括号/不带括号的函数字符串直接绑定给@click作为回调。如果需要通过配置动态触发对应方法,可采用以下两种可行方案:

方案1:actions数组存储函数引用

将data改成普通函数声明,actions的to字段直接存对应方法的引用:

<script>
export default {
  // 去掉箭头函数,用普通函数声明data
  data() {
    return {
      actions: [
        {
          title: 'Print',
          to: this.print
        },
        {
          title: 'Download',
          to: this.download
        }       
      ]
    }
  },
  methods: {
    print() {
      // 打印逻辑
    },
    download() {
      // 下载逻辑
    }
  }
}
</script>

模板部分的@click="item.to"不需要修改即可正常运行。

方案2:存储纯函数名字符串,点击时动态调用

actions的to字段存不带括号的纯函数名字符串:

actions: [
  {
    title: 'Print',
    to: 'print'
  },
  {
    title: 'Download',
    to: 'download'
  }       
]

模板部分的点击事件修改为通过实例访问对应方法执行:

<v-list-item
  v-for="(item, index) in actions"
  :key="index"
  @click="this[item.to]()" 
>

内容的提问来源于stack exchange,提问作者user15242898

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:45:04