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

在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的方式赋值,也能触发界面变化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue,要实现数据的修改并更新页面,一般有以下方法: 1. 使用Vue数据绑定:Vue的核心思想是数据驱动视图,通过将数据与视图进行绑定,在数据发生改变时会自动更新相关的视图。可以通过在Vue实例定义data对象,并在模板使用双花括号或v-bind指令将数据与视图进行绑定。当数据发生改变时,相关的视图会自动更新。 2. 使用computed属性:Vue提供了computed属性来定义计算属性,它可以根据所依赖的数据动态计算出一个新的值。当所依赖的数据发生改变时,computed属性会重新计算并返回新的值,从而更新相关的视图。 3. 使用watch属性:Vue的watch属性用于监听指定数据变化,并在数据变化时执行对应的回调函数。通过在Vue实例定义watch属性,并设置要监听的数据和对应的回调函数,当数据发生改变时,回调函数会被触发,可以在回调函数更新页面。 4. 使用Vue的事件系统:Vue提供了自定义事件的机制,可以通过在组件触发自定义事件,并在父组件监听事件来实现数据的修改和页面更新。当触发自定义事件时,可以传递数据给父组件,父组件可以根据接收到的数据进行相应的处理,并更新页面。 总之,Vue可以通过数据绑定、计算属性、watch属性和自定义事件等方法来修改数据更新页面。根据具体的需求和场景,可以选择合适的方法来实现数据的修改和页面更新
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值