Vuejs 不能在模板中使用 lodash 但它适用于代码

Vuejs can't use lodash inside template but it works on code

我在全球范围内导入了 lodash:

window._ = require('lodash'); // app.js

当我像在方法中一样在代码上使用它时,它工作正常。 但是当我尝试在像这样的模板中使用它时:

{{_.get(user, 'address.name')}} 

显示未定义的错误:

Property or method "_" is not defined on the instance but referenced during render

为什么会这样?我可以重构创建一个新变量并在代码中分配值,它会起作用,但我也想直接在模板上使用它。

这可能是因为渲染(所以 属性 "_" 的调用)是在他实例化之前完成的。

在您的情况下,您可能必须在渲染之前调用的 created 生命周期回调中设置 window._

但我的建议是在您的组件的 "data" 属性 中设置它,甚至只导入和设置您需要的功能。

例如:

import clone from 'lodash/clone'

扩展我的评论:我通常不鼓励在 VueJS 模板中使用第三方 util/helper 方法。当然,这是个人选择,但让 VueJS 直接处理渲染要简单得多(并且还可以防止可能出现的反应性问题)。因此,您可以简单地使用计算 属性(或方法,如果您需要传递参数)来生成插入到模板中的字符串。

示例:

computed: {
  addressName() {
    return _.get(this.user, 'address.name');
  }
}

然后,在您的模板中,您可以简单地使用 {{ addressName }} 来呈现字符串。如果您需要更多的动态使用和更多的灵活性和抽象,您可以改用方法。例如,如果您的路径将是动态的,则您可以创建一个方法,该方法使用提供的 path 参数从 this.user 检索数据:

methods: {
  userData(path) {
    return _.get(this.user, path);
  }
}

在您的模板中,您可以简单地使用 {{ userData('address.name') }}