【发布时间】:2021-12-19 05:48:56
【问题描述】:
我正在尝试从 Vue 3 插件中创建一个全局计算属性,以便我的属性可以在任何组件中被动使用。我正在使用standard Vue 3 模式:
app.config.globalProperties.$foo = ...
这非常适合让我从任何组件访问this.$foo。但是,我也想在this.$foo 设置时触发行为。但是当我尝试使它成为一个可设置的计算属性时,就像这样——
app.config.globalProperties.$foo = computed({
get: () => ...
set: () => ...
})
——它不像一个计算属性:如果我从一个组件运行this.$foo = 'bar',它只会覆盖属性,而不触发计算的setter。 (在没有 setter 的计算上测试它,该属性也被简单地覆盖,Vue 通常会抛出警告。)
如何使用 setter 进行全局计算?关于全局属性(或 Vue 3 组合 API 中的计算属性)应该如何工作,我在这里是否遗漏了什么?
【问题讨论】:
-
我认为,globalProperties 是静态属性,非反应性。
-
您将 $foo 设为计算值,因此您可以通过
$foo.value对其进行修改。this没有被使用,所以你不应该依赖它。 -
简单地将您的计算结果导出到一个文件中并将其导入到您需要的任何地方怎么样?
标签: vue.js vue-component vuejs3 computed-properties