Vue中data数据变化后页面更新的问题

本文讨论了在Vue应用中,如何在APP对象的项目列表循环中正确处理`refreshTask4Project`函数,特别是在项目被点击时,如何使用Vue的`$set`方法实现数据更新以驱动界面刷新。

在APP对象里面:

const config1={
    el: '#app1',
    data: {
        projectList:[
            name:"",
            tasks:[]
        ],
    },
    refreshTask4Project(project){
        axios.post(url).then(function (res) {      
            project.tasks = res.data;   //方式1:直接赋值
            that.$set(project,"tasks",res.data);   //方式2:用Vue的赋值函数
        }
    }
}

project是APP对象projectList:[]的一个属性,refreshTask4Project() 是APP对象的一个函数,用来在project被点击后,对其task列表进行懒加载显示。

界面中对projectList进行了循环,输出一组卡片,每个卡片也对其下属的tasks列表进行了输出

<el-card v-for="(project, projectidx) in projectList">
    <div slot="header"  @click="refreshTask4Project(project)">
        {{project.name}}
    </div>
    <div class='tasklist'>
        <div v-for="(task,taskidx) in project.tasks" class="project">
           {{task.name}}
        </div>
    </div>
</el-card>

那么,refreshTask4Project函数应该用方式1、2中的那种对tasks数组元素赋值?这要看函数是如何被调用的!

1、由于vue也不能检测到data对象初始化之后的动态变化, 因此直接如果在代码中调用refreshTask4Project(project),则project.tasks=xxx 这样的赋值方式无法关联触发界面的变化,只能用vue自带的that.$set()方式赋值才行

2、但是像@click这样的,在projectList循环本身中来得到的元素project,就可以直接用project.tasks=xxx的方式赋值,也能触发界面变化。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值