Vuejs不能在模板内使用lodash,但在代码上可以使用。

问题描述 投票:0回答:1

我用 lodash全局导入。

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

当我在代码中使用它时,比如在methods中使用它时,它工作得很好。

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

显示未定义错误。

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

为什么会出现这种情况?我可以重构创建一个新的变量,并在代码中分配值,它可以工作,但我想直接在模板上使用它。

vue.js lodash undefined
1个回答
2
投票

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

例子:在你的模板中,你可以使用计算属性(或方法)来生成字符串,并将其插入到模板中。

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

那么,在你的模板中,你可以简单的使用 {{ addressName }} 来渲染字符串。如果你需要更多的灵活性和抽象性的动态使用,你可以使用方法来代替。例如,如果你的路径是动态的,那么你可以创建一个方法从 this.user 附带 path 参数。

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

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


1
投票

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

在你的情况下,你可能需要在实例化之前设置 window._created 生命周期回调,在渲染前调用。

但我的建议是在组件的 "data "属性中设置,甚至只导入和设置你需要的函数。

举个例子

import clone from 'lodash/clone'
© www.soinside.com 2019 - 2024. All rights reserved.