vue中组件的数据已经发生更新,但是页面未发生更新
vue中组件的数据已经发生更新,但是页面未发生更新问题描述父组件通过请求拿到数据后,在父组件中对数据进行处理,处理完成后通过props传递给子组件进行渲染,此时在子组件中修改数据后,通过vue Devtools查看数据以及修改完成,但是页面并没有刷新。问题代码父组件代码// 父组件<template><div><dataUpdate :multipleTable="d
·
vue中组件的数据已经发生更新,但是页面未发生更新
问题描述
父组件通过请求拿到数据后,在父组件中对数据进行处理,处理完成后通过props传递给子组件进行渲染,此时在子组件中修改数据后,通过vue Devtools查看数据以及修改完成,但是页面并没有刷新。
问题代码
父组件代码
// 父组件
<template>
<div>
<dataUpdate :multipleTable="data"></dataUpdate>
</div>
</template>
<script>
import dataUpdate from "./dataUpdate";
export default {
name: "",
data() {
return {
data: [{
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-08',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-06',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-07',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}]
}
},
components: {
dataUpdate,
},
methods: {
initData() {
this.data.map((item,index) => {
item.checked = true;
})
}
},
created() {
this.initData();
}
}
</script>
子组件代码
// 子组件
<template>
<el-table
ref="multipleTable"
:data="multipleTable"
tooltip-effect="dark"
style="width: 100%">
<el-table-column width="55">
<template slot="header">
<span>选择</span>
</template>
<template slot-scope="scope">
<el-checkbox v-model="scope.row.checked"></el-checkbox>
</template>
</el-table-column>
<el-table-column
label="日期"
width="120">
<template slot-scope="scope">{{ scope.row.date }}</template>
</el-table-column>
<el-table-column
prop="name"
label="姓名"
width="120">
</el-table-column>
<el-table-column
prop="address"
label="地址"
show-overflow-tooltip>
</el-table-column>
</el-table>
</template>
<script>
export default {
props: {
multipleTable: {
type: Array,
required: true,
}
},
}
</script>
问题解决方式
1,通过this.$set修改数据
通过该方式可以实现数据刷新页面也刷新,但是当数据较多时,页面会出现卡顿的现象。
2,使用强制刷新
使用this.$forceUpdate()方法进行强制刷新。
3,更换数据的处理方式。
vue的数据是双向绑定的,在组件中vue通过观察者模式对数据进行监听,但是在此问题中我们对数据通过属性追加的形式进行了修改,因此vue对追加的属性的监听会出现纰漏,所以会出现组件数据更新了但是页面并没有刷新的问题。
数据修改方式
更换数据修改方式后,子组件的数据更新页面也会及时刷新。
// 父组件
<template>
<div>
<dataUpdate :multipleTable="updataData"></dataUpdate>
</div>
</template>
<script>
import dataUpdate from "./dataUpdate";
export default {
name: "",
data() {
return {
data: [{
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-08',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-06',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-07',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}],
updataData: [],
}
},
components: {
dataUpdate,
},
methods: {
initData() {
this.data.map((item,index) => {
// item.checked = true;
this.updataData.push({
date:item.date,
name:item.name,
address:item.address,
checked:true,
})
})
}
},
created() {
this.initData();
}
}
</script>
更多推荐
已为社区贡献3条内容
所有评论(0)