重写Vue的mixin方法

asp*_*aga 3 javascript vue.js

有没有一种方法可以覆盖一些由本地组件在组件内部调用的 npm 的 mixin ?

我有一个 npm 包组件,其中 node_modules/somePackageName/components/footer.vue使用另一个来自的 mixins node_modules/somePackageName/mixins/popup.js

其中popup.js包含以下方法:

methods: {
  setPopupActiveStatus (val, blur = true) {
    const isVisible = false
  }
},
Run Code Online (Sandbox Code Playgroud)

我想从App.vue使用该footer.vue组件的地方覆盖它的行为,如下所示:

methods: {
  setPopupActiveStatus (val, blur = true) {
    const isVisible = true
  }
},
Run Code Online (Sandbox Code Playgroud)

但它并没有像我想要的那样工作。

====更新====

以下是我如何根据 @Estradiaz 的回答解决我的问题的解释:

在此输入图像描述

Kyl*_*Mit 5

组合 mixin 和组件选项时:

\n
\n

当 mixin 和组件本身包含重叠选项时,它们将使用适当的策略“合并”:

\n
    \n
  • 数据对象进行递归合并,在发生冲突时,组件\xe2\x80\x99s 数据优先。

    \n
  • \n
  • 具有相同名称的钩子函数将合并到一个数组中,以便所有这些函数都将被调用。Mixin 钩子将在组件\xe2\x80\x99 自己的钩子之前被调用。

    \n
  • \n
  • 方法,组件指令将合并到同一个对象中。当这些对象中存在冲突的键时,组件\xe2\x80\x99s 选项将优先。

    \n
  • \n
\n
\n

下面是一个由组件和 mixin 提供的方法的示例:

\n
var mixin = {\n  methods: {\n    foo: function () {\n      console.log(\'Mixin Msg\')\n    },\n  }\n}\n\nvar vm = new Vue({\n  mixins: [mixin],\n  methods: {\n    foo: function () {\n      console.log(\'Component Msg\')\n    },\n  }\n})\n\nvm.foo() // => "Component Msg"\n
Run Code Online (Sandbox Code Playgroud)\n

这是codesandbox 中的一个示例

\n

所以我相信你应该能够通过在组件上提供一个同名的方法来“覆盖”mixin,并且它将优先

\n