_
我可以在我的所有 vue 组件中使用 lodash吗?
例如:
我有如下组织的组件:
App.vue
> Parent.vue
>Child.vue
我希望我的所有组件都可以访问_
lodash 而不在每个组件 vm 中定义data
===
我也在尝试使用Mixins。有用。但结果不是这样的,_().isEmpty()
而不是_.isEmpty()
_
我可以在我的所有 vue 组件中使用 lodash吗?
例如:
我有如下组织的组件:
App.vue
> Parent.vue
>Child.vue
我希望我的所有组件都可以访问_
lodash 而不在每个组件 vm 中定义data
===
我也在尝试使用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
而不是普通属性分配的优点是您可以定义一个描述符,该描述符允许您将属性设置为只读,默认情况下它将是只读的。这会阻止消耗组件覆盖它。
这在这篇博文(我写的)中有更详尽的解释。
注意:这种方法的缺点是你会得到整个 Lodash 库,即使你只需要一两个函数。如果这是一个问题,最好import { reduce, whatever } from "lodash";
在需要它的文件顶部使用。
您可以将 导入lodash
到每个组件中:
<script>
import _ from 'lodash'
export default {
methods: {
test (value) {
return _.isEmpty(value)
}
}
}
</script>
对于与 js 模块代码分离的内联模板,它应该使用:
Vue.component('some-tag', {
computed: {
_() {
return _;
}
}
});
然后您可以在模板中以“本机”方式使用它 - _.isEmpty(value)
.
import _ from 'lodash'
Vue.prototype._ = _
在你的 main.js 文件中插入这些行,它将在你的应用程序中运行。
lodash
你可以像这样全局导入
window._ = require('lodash');
导入后,您将可以_
从任何地方访问。
一种对我有用的简单方法:
Vue.set(Vue.prototype, '_', _);
这应该允许您在所有组件模板和 vue 实例中使用 _ 。
你可以像这样使用插件/mixin。
import _ from 'lodash';
exports default {
install : function(Vue, options){
Vue.mixin({
computed : {
"_" : function(){
return _;
}
}
});
}
}
查看 vue-lodash!!这是在 vue 中使用 lodash 的新包装器。您可以使用它来调用它
Vue._.random(20) // 用于获取 20 之间的随机数
this._.random(20) //或你想使用的其他方法
在任何组件文件中:)
正确的方法是这样使用提供/注入:
import _ from 'lodash';
const app = createApp({
provide: {
$_: _,
}
});
然后在另一个组件中:
<script>
export default {
name: 'аnоthег-component',
inject: [
'$_'
]
}
</script>
对于 vue 用户
转到 main.js
import _ from 'lodash'
Vue.set(Vue.prototype, '$_', _)
对于 nuxt.js 用户
在插件文件夹中创建 main.js
插件/main.js
import _ from 'lodash'
Vue.set(Vue.prototype, '$_', _)
然后添加到 nuxt.config.js
plugins: ['~plugins/main.js'],
vue 和 nuxt js 的用法相同
然后在组件中使用
this.$_.map(arra,(x)=>{})
您还可以创建一个基础组件并让您的所有组件扩展它。
// base-component
import _ from 'lodash';
export default Vue.extend({
computed: {
_() {
return _;
},
},
});
// my-component
import BaseComponent from 'path/to/base-vue';
export default BaseComponent.extend({
template: '<p>Lodash is available: {{!!_}}</p>'
methods: {
doSomehting() {
// `this._` should be available
},
},
});
这种方法的优点是它不具有侵入性,因此将来不会与 Vue 发生冲突。此外,您可以向 BaseComponent 添加更多内容,例如其他库和外部服务,它们将可用于所有其他组件。
缺点是它更冗长,您必须记住从基本组件继承。