提问人:0x5929 提问时间:9/23/2023 更新时间:11/9/2023 访问量:73
Vue2 - mixin 中的公共/私有方法实现是什么样子的?
Vue2 - What does a public/private method implementation look like in mixins?
问:
我看到以下内容已记录在案,但我很难想象如何实现这一点。
// Even better!
var myGreatMixin = {
// ...
methods: {
publicMethod() {
// ...
myPrivateFunction()
}
}
}
function myPrivateFunction() {
// ...
}
export default myGreatMixin
我遇到的问题是,在包含多个 mixin 的组件中,我们如何管理它们,这里的最佳实践/惯例是什么?
我了解这将如何解决我提到的问题。
var myGreatMixin = {
// ...
methods: {
$_myGreatMixin_update: function () {
// ...
}
}
}
但是,正如问题所述,我试图了解如何在组件中实现更好的方法。
我的疯狂想法,不确定这是否可行/有意义?
// myMixin
const method1 = () => console.log('method1 firing')
export default {
methods: {
$_myMixin() {
return {
method1
}
}
}
}
// component
mixins: [myMixin],
data: () => ({
myMixinMethods: {}
}),
created() {
this.myMixinMethods = this.$_myMixin()
},
mounted() {
this.myMixinMethods.method1()
}
这感觉很复杂,所以我出去寻找更多的答案,发现有一种更好的方法,也许是 pubic/private 方法,但不幸的是,我不太明白它是如何实现的,以及它是否可以解决我在 vue 组件中使用多个 mixin 的命名空间问题。
答:
1赞
Ali Bahrami
9/23/2023
#1
在 Vue 2 中,没有内置的“私有”方法概念,但你可以通过在组件或 mixin 对象之外定义函数来模仿这种行为,就像你提供的示例一样。这些功能将无法从其他组件或 mixin 访问,从而有效地使它们成为“私有”。
你提到的“更好”的方法涉及在 mixin 对象之外定义一个私有函数。此函数只能在同一文件/模块中访问,并且在将 mixin 导入到组件中时不会公开。下面是如何使用此方法的示例:
所以,像这样定义 mixin:
function privateMethod() {
console.log('Private method firing');
}
export default {
methods: {
publicMethod() {
console.log('Public method firing');
privateMethod();
}
}
}
在组件上:
import myMixin from './myMixin';
export default {
mixins: [myMixin],
mounted() {
this.publicMethod(); // This will call both the public and private methods
}
}
所以,你可以模仿这样的行为。
评论
0赞
0x5929
9/24/2023
我明白了,但是如何才能更好地消除一个组件中有多个混合蛋白的问题,如果组件变大,怎么知道函数来自哪里(来自哪个混合蛋白)?
0赞
Ali Bahrami
9/25/2023
伙计,mixins 从 vue 2 中删除了。取而代之的是,有一些可组合项可以按照您想要的方式使用,并且具有出色的 DX。我认为通过一些技巧,它们可以在 vue 2 中使用,但如果可能的话,我建议切换到版本 3。
1赞
0x5929
9/27/2023
我知道:/不幸的是,目前升级不是一种选择。但是,这是一个很好的提示,我将寻找 vue2 中可组合项的解决方法
评论
this
$_myMixin_methodName
this