javascript - 调用基础组件的方法/功能
问题描述
有Base.vue
<template><div>{{ name }}</div></template>
<script>
export default {
data() {
return {name: 'Example Component'};
}
};
</script>
并且Extended.vue
:
<script>
import Base from './Base.vue';
export default {
extends: Base,
data() {
return {name: 'Extended Example Component'};
}
};
</script>
是否可以data
从基础重用而不是硬编码Extended Example Component
?某种super
来自OOP的东西?寻找涉及诸如mount
, methods
,computed
等内容的通用解决方案。
更新
使用 OOP 时,我们使用这种方法(Python 示例):
class Base:
def __init__(self):
self.name = 'Example Component'
class Extended(Base):
def __init__(self):
super().__init__()
self.name = f'Extended {self.name}'
这样我们就可以重用self.name
字段。
解决方案
extends
并以指定的方式mixins
合并选项,这是继承组件功能的官方方式。它们不提供对继承的完全控制。
对于可能在组件定义(Base
和Extended
)之间更改的静态数据,通常使用自定义选项:
export default {
myName: 'Component',
data() {
return { name: this.$options.myName };
}
}
和
export default {
extends: Base,
myName: `Extended ${Base.options.myName}`
}
请注意,这name
是现有的 Vue 选项,不应用于任意值。
任何可重用的函数都可以从组件定义中提取到单独的导出中。
对于无法修改的现有组件,data
并且可以在可能的情况下访问其他基本组件属性:
data() {
let name;
name = this.$data.name;
// or
name = Base.options.data.call(this).name;
return { name: `Extended ${name}` };
}
这种方法不是面向未来的,并且与组合 API 不兼容,因为data
等之间没有明确的区别,并且this
在 setup 函数中不可用。可以使用实例访问,getCurrentInstance
但它是内部 API,并且可以更改,恕不另行通知。
推荐阅读
- curl - curl命令中-H,-d等的意义是什么
- python - 使用 Python 对 MySql 表的列进行排序
- firebase - 无法在本地提供 Firebase 云功能
- python - 即使在使用 if 语句避免除以 0 之后,python 函数中的除法为零错误
- node.js - 节点异步函数返回未定义
- c++ - 检查输入是否为整数,并且输入超过 1 个字符会导致在控制台中打印多条语句,而不是只打印一次
- java - 方法重载未按预期工作
- html - 如何使文本在Angular中始终返回小写
- c# - Xamarin 中的 NSMouseInRect 是什么
- python-3.x - 在 pyqt5 文本框中编辑文本时触发函数