uni-app 计算属性中的$refs和函数的$refs不一样

2q5ifsrm  于 2021-11-27  发布在  Java
关注(0)|答案(3)|浏览(362)

问题描述

我在自己第二次封装uview-uiu-uploader组件,我需要通过计算属性快捷的获取到组件的引用,但是我发现计算属性中的$refs和函数中的$refs拿到的uploader不一致

复现步骤

[复现问题的步骤]

  1. 启动 '...'
<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>
  1. 通过微信小程序控制台调试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

补充信息

[可选]
[根据你的分析,出现这个问题的原因可能在哪里?]

uubf1zoe

uubf1zoe1#

而且经过调试发现计算属性无论在属性是否被引用都会提前执行一遍

fnatzsnv

fnatzsnv2#

一年了官方都不解决嘛

wmvff8tz

wmvff8tz3#

现在我已经明白了,计算属性中不要去获取refs上面的内容,应该直接使用函数去获取refs保证每一次获取到的都是最新的值

相关问题