【发布时间】:2020-11-16 15:43:11
【问题描述】:
我想在我的 vue 组件中显示一个数组的长度。该数组嵌套在一个 vue 插件中。
每次我启动 API Call 时,我都会在此数组中“推送”一个新元素:this.$apiCall.apiCallCache
这可以监视这个数组的变化吗?我在下面的示例中做错了吗?
我只得到0 洞时间。但是,如果我点击按钮并触发logApiCache(),它将控制台记录数组的正确长度,而计算的函数在 span 元素/工具提示中仍显示 0。
<template>
<v-footer
app
tile
>
<span>Queue: {{ footerClockTooltip() }}</span>
<app-footer-button
:name="'Clock'"
:tooltip="footerClockTooltip()"
:icon="$icons.mdiClockOutline"
@click="logApiCache"
/>
</v-footer>
</template>
<script>
export default {
name: 'Footer',
computed: {
/*
footerClockTooltip() {
return this.$apiCall.apiCallCache.length
}
*/
},
methods: {
logApiCache() {
this.$forceUpdate()
console.error(`logApiCache: ${this.$apiCall.apiCallCache.length}`, this.$apiCall.apiCallCache)
},
footerClockTooltip() {
console.error('New Queue:', this.$apiCall.apiCallCache.length)
return this.$apiCall.apiCallCache.length
}
}
}
</script>
编辑:
这是我的 Vue 插件:
import Vue from 'vue'
const ApiClass = require('../classes/ApiClass')
const api = new ApiClass()
// Export Vue Plugin
const ApiCalls = {
install(Vue) {
Object.defineProperties(Vue.prototype, {
$apiCall: {
get() {
return api
}
}
})
}
}
Vue.use(ApiCalls)
感谢您的帮助。 :)
【问题讨论】:
-
您能分享一下您插件中的代码吗?我认为它可能很有用。还有你使用的是哪个版本的 Nuxt?
-
感谢您的帮助。 :) 我添加了上面的文件,这里是我的版本:
"nuxt": "2.12.2"。我想看的数组的重要部分是addCall>this.apiCallCache.push({ ... }) -
Vue 不保留预突变值的副本,因此问题可能是您将数据推送到现有数组中,而不是创建新数组并使用现有数据和新数据更新它。
-
这到底是什么意思?我有点失落。在我的 Vue 插件中,我从
ApiClass创建了一个实例。然后我将这个实例绑定到我的 Vue 对象,所以我可以使用this.$apiCall访问它。现在,如果我在单独的组件中启动请求/api 调用,我只需调用this.$smcApiCall.addCall(request, callback)。然后addCall函数将一个新对象推送到类属性的数组中。 -
即使我手动将数据“推送”到这个数组,我的计算函数也不会更新我的 span 元素。但同样,console.log 中的长度是正确的,如您在这张图片中看到的:link
标签: javascript vue.js electron nuxt.js