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

Vue模板使用_.escape报错:_未定义,寻求解决方案

解决Vue模板中Lodash _未定义的报错问题

这问题我太熟了,核心原因就是模板的作用域和<script>部分不一样,咱们一步步拆解解决:

为什么会报错?

你在app.js里把Lodash挂载到了Vue原型的$lodash上,所以在<script>里能通过this.$lodash正常调用方法。但Vue模板的作用域是当前组件的实例,默认只能直接访问实例上的属性/方法,而_并没有被挂载到实例或全局,所以渲染时就会提示"_" is not defined。

具体解决方案

方案1:模板里直接用$lodash(最直接)

既然你已经把Lodash挂到了Vue原型的$lodash上,模板里可以直接访问这个实例属性,把代码改成这样:

<a v-bind:href="'javascript:artist(\'' + $lodash.escape(artist) + '\')'">

这种方式不需要额外修改配置,直接生效。

方案2:把_挂载到全局(快速但不推荐)

如果就是习惯用_,可以在app.js里把Lodash挂载到window对象上:

// 原有的Lodash导入代码下面加这行
window._ = lodash;

这样不管是模板还是脚本里,都能直接用_了。但这种全局挂载容易造成命名冲突,大型项目不建议这么干。

方案3:组件内定义局部_(更规范)

在组件的<script>里,把$lodash赋值给组件实例的属性,让模板能直接访问:

export default {
  // ...你的其他组件代码
  created() {
    // 把$lodash赋值给实例的_属性
    this._ = this.$lodash;
  }
}

或者用计算属性的方式(更符合Vue的响应式规范):

export default {
  computed: {
    _() {
      return this.$lodash;
    }
  }
}

这样模板里就能继续用_.escape(artist)的写法,而且是组件局部的,不会污染全局环境。

额外优化:替换javascript:的写法(更Vue化)

Vue里其实不推荐用javascript:这种href跳转的写法,建议用@click事件代替,既符合Vue的事件处理逻辑,也更安全:

<a @click="() => artist($lodash.escape(artist))" class="cursor-pointer">

加个cursor-pointer类是为了让链接看起来有可点击的样式(鼠标悬停变手型),你可以自己定义这个CSS类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:46:10