更新vue的data中的元素,vue更新错误
一、总结
一句话总结:
解决方式:用【深拷贝】可以解决,直接对vue操作的【一级数据进行深拷贝】,然后修改
问题思考:估计vue基于数据的更新【只检查一级数据的地址是否改变】,如果地址改变才基于这个更新
错误方式:如果这样更新:【vue看到的数据地址根本没有改变】:this.blog_entries_logs[index]['open_detail']=!this.blog_entries_logs[index]['open_detail'];
具体解决:
//点击博客引入详情操作toggle_blogEntry_detail:function(index){
let new_data = JSON.parse(JSON.stringify( this.blog_entries_logs));
new_data[index]['open_detail']=!new_data[index]['open_detail'];
this.blog_entries_logs=new_data;
},
二、更新vue的data中的元素,vue更新错误
1、错误现象
核心错误代码:
//点击博客引入详情操作toggle_blogEntry_detail:function(index){
this.blog_entries_logs[index]['open_detail']=!this.blog_entries_logs[index]['open_detail'];
},
循环:
<template v-for="(blog_entries_log,index) in blog_entries_logs">
事件绑定:
<div @click.stop="toggle_blogEntry_detail(index)" style="font-size: 20px;cursor: pointer;">
v-show显示:
<tr class="blog_load_tr" v-show="blog_entries_log.open_detail">
完整vue代码:
<script>blog_entry_box_vue=new Vue({
el:'#blog_entry',
data:{
blog_entries_logs:window.blog_entries_logs,
},
beforeMount:function(){
//console.log('beforeMount');
//用于预处理数据
this.init_data();
},
methods:{
click_1:function(){
this.open=!this.open;
},
//初始化数据
init_data:function(){
for(let i=0;i<this.blog_entries_logs.length;i++) {
this.blog_entries_logs[i]['open_detail']=true;
}
console.log('init_data');
},
//点击博客引入详情操作
toggle_blogEntry_detail:function(index){
this.blog_entries_logs[index]['open_detail']=!this.blog_entries_logs[index]['open_detail'];
console.log(this.blog_entries_logs[index]['open_detail']);
console.log(index);
console.log(this.blog_entries_logs);
},
time_format_toDay:function (ts) {
ts=ts*1000;
return moment(ts).format('YYYY-MM-DD');
},
time_format_toSecond:function (ts) {
ts=ts*1000;
return moment(ts).format('YYYY-MM-DD HH:mm:ss');
}
}
});
</script>
2、解决方案
解决方式:
用【深拷贝】可以解决,直接对vue操作的【一级数据进行深拷贝】,然后修改
问题思考:
估计vue基于数据的更新只检查一级数据的地址是否改变,如果地址改变才基于这个更新
如果这样更新:【vue看到的数据地址根本没有改变】:this.blog_entries_logs[index]['open_detail']=!this.blog_entries_logs[index]['open_detail'];
具体解决:
//点击博客引入详情操作toggle_blogEntry_detail:function(index){
let new_data = JSON.parse(JSON.stringify( this.blog_entries_logs));
new_data[index]['open_detail']=!new_data[index]['open_detail'];
this.blog_entries_logs=new_data;
},
错误位置的界面:
以上是 更新vue的data中的元素,vue更新错误 的全部内容, 来源链接: utcz.com/z/376483.html