更新vue的data中的元素,vue更新错误

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

回到顶部