我可以在所有vue组件中使用lodash _吗?

例如:

我有如下组织的组件:

App.vue > Parent.vue > Child.vue

我希望我的所有组件都能访问_个lodash,而不必在每个组件vm data中定义

===

我也在try 使用Mixins.它起作用了.但结果并不是预期的_().isEmpty()而不是_.isEmpty()

推荐答案

当前的一些答案可能适用于您的场景,但它们也有缺点:

  • 添加到window对象意味着无法在服务器上渲染Vue项目,因为服务器无权访问window对象.
  • 在每个文件中导入都很好,但如果你必须记住在每个文件中导入,那可能会很痛苦.

另一种方法是将库添加到Vue原型中.所有组件都继承自此,因此它们现在都可以从this关键字访问您的库.

import _ from 'lodash';    
Object.defineProperty(Vue.prototype, '$_', { value: _ });

现在,lodash可以作为所有组件的实例方法.在一个.vue文件您可以在不导入任何内容的情况下执行此操作:

export default {
  created() {
    console.log(this.$_.isEmpty(null));
  }
}

使用Object.defineProperty而不是普通属性赋值的优点是,您可以定义一个描述符,该描述符允许您将属性设置为只读(默认情况下为只读).这将阻止消费组件覆盖它.

这一点在我写的this blog post篇文章中有更详细的解释.

Note:这种方法的缺点是,即使只需要一两个函数,也可以获得整个Lodash库.如果这是一个问题,最好在需要它的文件顶部使用import { reduce, whatever } from "lodash";.

Vue.js相关问答推荐

检测Vue3/Vue-test-utils中的Vuex还原/Mutations

Vuetify快速失败不会阻止发送表单

vuejs中如何获取数组总长度

Vue CLI: 如何在一个vtextfield更改时让另一个vtextfield的值也同时更改,但同时又可以覆盖它?

在 Vue 中更改 json 数据后,如何在屏幕上重新呈现表格组件?

如何使用 Vite 从公共目录导入 JSON 文件?

vue 3 中范围样式和深度样式的问题

使用 nuxt.js 组件自动导入对性能不利吗?

Vue-router:循环路由以动态创建

带有外部配置文件的 Vue js

Vue.js 如何计算总数?

Vuetify 单选按钮未显示为选中状态

Laravel 事件未广播

Vuetify 2 个工具栏和 1 个导航抽屉,navigation drawer导航抽屉上方有 1 个工具栏

v-if inside v-for - 在两列中显示项目列表

如何将数据传递给 Vue.js 中的路由视图

如何让 vuetify 数据表在卡片内时跨越容器的整个宽度?

Axios 请求拦截器在我的 vue 应用程序中不起作用

Vuetify 离线文档

如何使用vue js判断组件本身的数据何时发生变化?