javascript - 覆盖 Vue 的 mixin 方法
问题描述
有没有办法覆盖一些由本地组件在组件内部调用的 npm 的 mixin?
我有一个 npm 包组件,
node_modules/somePackageName/components/footer.vue
其中使用了另一个来自
node_modules/somePackageName/mixins/popup.js
其中popup.js
包含以下方法:
methods: {
setPopupActiveStatus (val, blur = true) {
const isVisible = false
}
},
我想从App.vue
我使用该footer.vue
组件的地方覆盖它的行为,如下所示:
methods: {
setPopupActiveStatus (val, blur = true) {
const isVisible = true
}
},
但它不像我想要的那样工作。
==== 更新 ====
以下是我如何根据@Estradiaz 的回答解决我的问题的解释:
解决方案
组合 mixin 和组件选项时:
当 mixin 和组件本身包含重叠选项时,它们将使用适当的策略“合并”:
数据对象进行递归合并,在发生冲突时组件的数据优先。
将同名的钩子函数合并到一个数组中,这样所有的钩子函数都会被调用。Mixin 钩子会在组件自己的钩子之前被调用。
方法、组件和指令将合并到同一个对象中。当这些对象中存在冲突的键时,组件的选项将优先。
下面是一个由组件和 mixin 提供的方法的示例:
var mixin = {
methods: {
foo: function () {
console.log('Mixin Msg')
},
}
}
var vm = new Vue({
mixins: [mixin],
methods: {
foo: function () {
console.log('Component Msg')
},
}
})
vm.foo() // => "Component Msg"
所以我相信你应该能够简单地通过在组件上提供一个具有相同名称的方法来“覆盖”mixin,它将优先
推荐阅读
- python - ImportError,没有命名的模块
- matplotlib - 没有连续边界的连接点
- javascript - 零 btye 文件写入 Firebase 存储
- aes - 停用内核稳压器以在 STM32F407 DISCOVERY 板上执行功率分析
- java - 在Android中使用openFileOutput使用FileOutputStream时如何阻止文件覆盖自身
- django-rest-framework - 无法运行 django 服务器
- python - 蟒蛇硒。为什么按下按钮会将机器人发送到主页而不是预期的结帐页面?
- php - 在 WooCommerce 管理菜单中包含来自自定义订单状态的订单计数
- list - 在 Dart 中合并两个对象列表
- python-3.x - 如何使用python将数据附加和更新到字典中的相同键