You need to enable JavaScript to run this app. Laravel项目中Vue.js自定义实例属性__调用时报未定义错误求助
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目中Vue.js自定义实例属性__调用时报未定义错误求助

问题根源

你将__方法挂载到了Vue.prototype原型上,该方法仅属于Vue实例的属性,只能通过实例上下文的this.__方式调用。你在组件data配置中直接写__('text.save')时,JS会去全局作用域查找__方法,而你没有将该方法暴露到全局,自然会报未定义的错误。

解决方案

有两种常用方案可选,按需选择即可:

方案1:调整调用写法(推荐)

所有在组件script代码中调用该方法的位置,加上this.前缀即可,因为script部分不会自动绑定Vue实例上下文:

data(){
    return {
        query: '',
        results: [],
        categoryText: this.__('text.save'), // 新增this前缀
        categoryId: 0
    }
}

补充:如果是在Vue的<template>模板中调用,可以直接写{{ __('text.save') }},模板渲染时会自动绑定实例上下文,不需要加this。

方案2:全局暴露方法,对齐Laravel blade用法

如果希望完全和blade模板的调用方式一致,script中也不需要加this,可以在app.js中额外将__方法挂载到window全局对象上:

// app.js中修改原有配置
import _ from 'lodash'
const translate = str => _.get(window.i18n, str)
window.Vue.prototype.__ = translate
window.__ = translate // 新增这一行,暴露到全局

调整后你原来的组件代码不需要做任何修改即可正常运行。

额外注意项

你的代码中还有一处隐性问题:categoryChange方法的参数是e,但你后续获取id时用了全局的event对象,部分浏览器不支持全局event对象,建议统一修改为:

categoryChange(e) {
    this.categoryText = e.target.text;
    var id = e.target.getAttribute('data-category-id'); // 把event改成e
    this.categoryId = id;
}

内容的提问来源于stack exchange,提问作者Мирослав Пейчев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 06:15:01