问题描述
我在自己第二次封装uview-ui
的u-uploader
组件,我需要通过计算属性快捷的获取到组件的引用,但是我发现计算属性中的$refs
和函数中的$refs
拿到的uploader不一致
复现步骤
[复现问题的步骤]
- 启动 '...'
<template>
<u-upload
ref="uploader"
:action="''"
:file-list="imgUrls"
:auto-upload="false"
:max-count="comMaxCount"
:deletable="comEditable"
:max-size="maxSize"
:show-progress="false"
/>
</template>
<script>
export default {
name: 'ImgUploader',
props: {
imgUrls: {
type: Array,
default: () => []
},
required: {
type: Boolean,
default: false
},
maxCount: {
type: Number,
default: 99
},
maxSize: {
type: [String, Number],
default: Number.MAX_VALUE
},
disabled: {
type: Boolean,
default: false
}
},
computed: {
// u-uploader 默认的禁用不是禁用新增和编辑
// 现在使用外部传入的disabled控制两个变量
// 通过maxCount控制新增按钮
comMaxCount() {
if (this.disabled) return 0
else return this.maxCount
},
// 通过editable控制编辑
comEditable() {
return !this.disabled
},
uploader() {
// 计算属性中的uploader是一个微信组件
return this.$refs.uploader
},
fileList() {
return this.uploader.fileList
}
},
mounted() {
Object.$vm0 = this
},
methods: {
clear() {
// 函数中的 uploader 是一个vue组件(正常)
this.$refs.uploader.clear()
}
}
}
</script>
<style>
</style>
- 通过微信小程序控制台调试fileList,debugger截图如下
预期结果
期望计算属性中获取到的uploader和函数(clear)中的uploader是一个对象
实际结果
计算属性中获取的uploader和函数中的不是一个对象
系统信息:
- 发行平台:微信小程序
- 操作系统 [如 iOS 12.1.2、Android 7.0]
- uni-app v2.7.14 uni-app cli v2.0.0-27920200618002
- 设备信息 Iphone6
补充信息
[可选]
[根据你的分析,出现这个问题的原因可能在哪里?]
3条答案
按热度按时间uubf1zoe1#
而且经过调试发现计算属性无论在属性是否被引用都会提前执行一遍
fnatzsnv2#
一年了官方都不解决嘛
wmvff8tz3#
现在我已经明白了,计算属性中不要去获取refs上面的内容,应该直接使用函数去获取refs保证每一次获取到的都是最新的值