You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js中使用Percircle库时API返回的动态数据不更新如何解决?

Vue项目Percircle动态百分比首次不渲染解决方案

问题根因

Percircle 是原生JS实现的进度环组件,默认仅在初始化时读取一次DOM上的data-percent属性完成渲染,不会主动监听DOM属性的动态变化。
你首次发起API请求前,Percircle已经完成初始化,此时读取到的是receivedFilterData.visit_percentage_without_prescription的初始空值/默认值;API返回数据更新绑定属性后,Percircle未触发重绘逻辑,因此仍显示初始状态。第二次调用API时,上一次更新后的属性值已经存在于DOM上,Percircle初始化时即可读取到正确值,因此展示正常。

解决方法

步骤1:给Percircle元素添加ref标识,方便获取DOM实例

<div 
  ref="percentCircle"
  :data-percent="receivedFilterData.visit_percentage_without_prescription" 
  class="small percircle red animate"
></div>

步骤2:API数据更新后手动触发Percircle重绘

在API请求成功、数据赋值完成后,通过$nextTick等待Vue完成DOM属性更新,再调用Percircle的初始化方法触发重绘:

// 你的API请求逻辑
yourApiRequest().then(res => {
  // 更新绑定的数据源
  this.receivedFilterData = res.data
  // 等待Vue更新DOM后,手动重绘进度环
  this.$nextTick(() => {
    // 带jQuery写法
    $(this.$refs.percentCircle).percircle()
    // 无jQuery原生写法
    // percircle(this.$refs.percentCircle)
  })
})

兼容Vue3写法

如果使用Vue3,调整对应语法即可:

import { nextTick, ref } from 'vue'
const percentCircle = ref()

// API请求逻辑
yourApiRequest().then(res => {
  receivedFilterData.value = res.data
  nextTick(() => {
    percircle(percentCircle.value)
  })
})

优化建议

可以给receivedFilterData.visit_percentage_without_prescription设置初始默认值0,避免Percircle首次初始化时读取到undefined导致报错。

内容的提问来源于stack exchange,提问作者Hemant Sah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:27:02