提问人:Brant Ge 提问时间:6/27/2023 更新时间:6/27/2023 访问量:134
在 vue3 中,fake-progress 中的 progress 值不会在视图中更新,它始终为 0
In vue3, the value of progress in fake-progress is not updated in the view, it is always 0
问:
在vue3中,我想为网络请求添加一个进度条,所以我使用fake-progress,但是我可以使用它,因为它的值没有响应 这是我的代码:
<template>
<div>
{{ progress }}
<!-- <el-progress type="circle" :percentage="parseInt(progress * 100)"></el-progress> -->
</div>
</template>
<script setup>
import FakeProgress from 'fake-progress';
import { reactive, toRef, watch, watchEffect } from 'vue';
let fake = new FakeProgress({
timeConstant: 1000,
autoStart: true,
})
let fakeRef = reactive(fake)
let progress = toRef(fakeRef, 'progress')
setInterval(() => {
console.log(fake.progress);
console.log(fakeRef.progress);
console.log(progress);
}, 1);
</script>
所有值都已更改,但在视图中 {{progress}} 始终为 0 我该怎么做?为什么会这样,五五五
我希望页面上的数字发生变化
答:
0赞
Alexander Nenashev
6/27/2023
#1
FakeProgress 不是 vue 响应式的。所以我们需要在这里添加一些反应性......
一个简单的解决方案是覆盖该属性并在更改时更新进度参考:progress
<script setup>
import FakeProgress from 'fake-progress';
import { ref } from 'vue';
const fake = new FakeProgress({
timeConstant: 1000,
autoStart: true,
});
const progress = ref(0);
Object.defineProperty(fake, 'progress', {
set(val){
progress.value = val;
},
get(){
return progress.value;
}
});
</script>
<template>
<div>
{{ progress }}
</div>
</template>
一个更聪明的解决方案是提供一个反应式对象来构造一个FakeProgress的实例:this
<script setup>
import {FakeProgress} from './fake-progress.js';
import { reactive } from 'vue';
// create our custom reactive instance
const fake = reactive({});
// set prototype
Object.setPrototypeOf(fake, FakeProgress.prototype);
// call constructor
FakeProgress.bind(fake)({
timeConstant: 1000,
autoStart: true,
});
</script>
<template>
<div>
{{ fake.progress }}
</div>
</template>
评论
0赞
Brant Ge
6/27/2023
哇,非常感谢!!
评论