vue响应式数据-修改对象的属性值,视图不更新

如图:

一:问题是:

我把数据处理后能console.log()打印出来,但是页面的内容不能同步的更新渲染;

二:要求:

在数组循环列表里面,我点击单个的item按钮时,需要实时加载进度条到90%,并改变item的flowStatus值同时在页面上渲染当前改变后的状态值。

三:方式:

用了$delete()先删除这个已经存在并且要改变的键值flowStatus;

this.$delete(flow,'flowStatus')

再$set()重新赋值flowStatus为我需要的状态值:

this.$set(flow,'flowStatus','0')

进度条加载一样。。。

四:代码

javascript 复制代码
        <el-row v-for="(flow,i) in item.children" :key="flow.flowId" class="flowinfo">
          <el-col :span="10" :offset="1"  style="">
            <div>
              <template>
                <el-tag v-if="flow.flowStatus === 10 || flow.flowStatus === 20" color="#red">{{'等待中'}}</el-tag>
                <el-tag v-if="flow.flowStatus === '0'"  color="#E9EAAC">{{'启动中...'}}</el-tag>
              </template>
            </div>
            <div class="flow">
              <el-row>
                <el-col v-if="flow.flowStatus === 30" :span="15" :offset="2">任务进度:<el-progress :percentage="90" :key="i" :format="format" top="20px"></el-progress></el-col>
                <el-col v-else :span="15" :offset="2">任务进度:<el-progress :percentage="flow.percentage" :key="i" :format="format" top="20px"></el-progress></el-col>
              </el-row>
            </div>
          </el-col>
          <el-col :span="10" :offset="1">
            <div style="padding-bottom: 30px;" >
              <el-button v-else style="float: right;" type="primary" size="mini" @click="start(flow)" >{{ '启动' }}</el-button>
            </div>
          </el-col>
        </el-row>

启动按钮

主要看前面几行:有注释的

点击某条列表的按钮后,该对象里面的状态值flowStatus由a变为b,进度条自己加载到90%

javascript 复制代码
    start(flow) {
      this.$nextTick(() => {
        this.$delete(flow,'flowStatus')          //先删掉对象里的flowStatus值
        this.$set(flow,'flowStatus','0')         //再新增flowStatus值为0  (第一个值为要改变的对象,第二个为要改的键名,第三个为改后的键值)
        if(flow.percentage < 100) {              //这是进度条的变化
          this.$delete(flow,'percentage')        //删掉对象里的percentage
          this.$set(flow, 'percentage', 90);      //  再新设置percentage值,使其发生变化为90
        }
        this.$forceUpdate()
        setTimeout(() => {
          let username = storage.get("baseInfo", "local") ? storage.get("baseInfo", "local").username : null;
          const queryForm = {
            projectId: projectId,
            ...
          }
          startExecutor(queryForm).then(res => {
            if(res.code === "200") {
              this.$message.success('执行成功')
            } else {
              this.$notify({
                title: '执行错误',
                message: res.message,
                type: 'warning'
              });
            }
            setTimeout(() => {
              this.getTaskList(this.taskData)
            }, 1000);
          })
        }, 3000);
      })
    },

点击改变的是里面的flowStatus和percentage

item.children=[

{

"execFlowList": [

{

"runDate": "20241205",

"submitTime": 1733469100453,

"submitUser": "hadoop",

"difftime": "0 sec",

"startTime": "2024-12-06 15:11:40",

"comment": "",

"endTime": "2024-12-06 15:11:40",

"flowId": "defence",

"projectId": 6,

"outTime": "0 sec",

"execId": 230,

"status": "FAILED"

}

],

"percentage": 0,

"flowExecId": 230,

"flowStatus": 70,

"flowId": "defence"

}...

]

相关推荐
听吉米讲故事几秒前
Slidev集成Chart.js:专业数据可视化演示文稿优化指南
javascript·信息可视化·数据分析
菥菥爱嘻嘻14 分钟前
JS手写代码篇---手写 new 操作符
开发语言·javascript·原型模式
隐含35 分钟前
webpack打包,把png,jpg等文件按照在src目录结构下的存储方式打包出来。解决同一命名的图片资源在打包之后,重复命名的图片就剩下一个图片了。
前端·webpack·node.js
lightYouUp1 小时前
windows系统中下载好node无法使用npm
前端·npm·node.js
Dontla1 小时前
npm cross-env工具包介绍(跨平台环境变量设置工具)
前端·npm·node.js
小妖6661 小时前
vue2 切换主题色以及单页面好使方法
前端·vue.js·elementui
胡桃夹夹子1 小时前
【前端优化】vue2 webpack4项目升级webpack5,大大提升运行速度
前端·javascript·vue.js·webpack·性能优化
Stringzhua1 小时前
JavaScript【7】BOM模型
开发语言·前端·javascript
DT——1 小时前
ECMAScript 2018(ES2018):异步编程与正则表达式的深度进化
开发语言·javascript·ecmascript
阿幸软件杂货间1 小时前
谷歌浏览器(Google Chrome)136.0.7103.93便携增强版|Win中文|安装教程
前端·chrome