vue中数组发生变化但视图没有更新,vue中对象属性改变视图不更新问题

  vue中数组发生变化但视图没有更新,vue中对象属性改变视图不更新问题

  本文主要介绍了vue中v-for数据的状态值发生了变化,但视图没有发生变化的解决方案。有很好的参考价值,希望对大家有所帮助。如有错误或不足之处,请不吝赐教。

  

目录

  v-表示数据状态值已更改,但视图未更改。问题现象,发生的问题,原因,解决的问题。v-for循环已更改。循环数据视图未更新。解决方案1解决方案2

  

v-for数据状态值变了,但是视图没改变

  

问题现象

  1.在v-for中,列表中的每个项目都有一个按钮。你点击按钮通过一个属性show,show,type为boolean动态选择按钮的类名。

  2.v-show通过每个项目的显示是真还是假来显示。

  最后我发现你点开之后,输出发现真假都变了,但是感觉好像是我在努力不重新渲染。通过查找发现v-for不会进行第二次华丽的增删数组操作,但这不是增删,只是改变了值的状态,也就是修改。以前这样写好像没问题。

  

问题出现原因

  1.您确定该属性是由下标动态添加的吗?其实本质还是满足加数组的运算。代码可能是这样的。

  data(){

  productDetailList: [],

  列表:[{

  id: 1,

  秀:真的,

  名称:“1111”

  },

  {

  id: 2,

  秀:真的,

  名称:“222”

  },

  }

  var info=JSON . parse(JSON . stringify(RES . data . info))

  this . product detaillist=info . product detaillist

  for(var I=0;I this . product detail list . length;i ) {

  this.productDetailList[i]。show=true

  }

  上面vue中的list列表,我可以直接写show属性。最后,写过去也没问题,可以实现数据双向绑定的尝试。

  所以区别很明显,就是在这个show属性里,我这次是通过角标动态添加的。而vue,对于这种不能听的。

  Vue当然有解决方案。

  

问题解决

  使用Vue的set方法,使用前要介绍一下。

  脚本

  从“vue”导入Vue

  1.页,面,张,版

  productDetailList中的view class= item-wrap v-for=(product,index):key= index

  button:class= product . show==true?

  icon font icon-Wei Biao ti 1 item-btn : icon font icon-夏香item-BTN

  @click=显示(产品,索引)/按钮

  查看v-show=product.show==true?“真:假”

  视图class=item-grid style=

  按钮type= default class= fold-BTN @ click= hide all Collapse all/button

  2.方法

  方法:{

  hideAll(){

  var arr=this.productDetailList

  for(var I=0;iarr .长度;i ){

  arr[i]。show=false

  Vue.set(this.productDetailList,I,arr[i])

  }

  },

  显示(产品、索引){

  product.show=!产品展示

  Vue.set(this.productDetailList,index,product)

  },

  

v-for循环改变循环数据视图不更新

  前端开发中,下图所示的菜单框架(左侧菜单内容被顶部菜单点击,然后数据中的菜单动态更新:[]) V-for循环菜单显示左侧菜单。

  问题:点击顶部菜单后(菜单[]被重新分配),左侧菜单无法更新到新菜单[]中的内容。

  原因:

  由于JavaScript的限制,Vue无法检测到以下变量数组:当你直接通过index设置一个项时,例如:VM . items[indexOfItem]=new value;修改数组长度时,例如:vm.items.length=newLength。

  

解决1

  为了避免第一种情况,下面两种方式会达到类似vm.items[indexOfItem]=newValue的效果,也会触发状态更新:

  //Vue.set

  Vue.set(示例1.items,indexOfItem,newValue)

  //Array.prototype.splice

  example 1 . items . splice(indexOfItem,1,newValue)

  为避免第二种情况,请使用拼接:

  示例1.items.splice(新长度)

  

解决2

  V-为循环中的K值选择数组对象的名称或其他非唯一值,如下图所示

  当原因:key代表的属性发生变化时,强制更新组件,将解决vue无法检测到数据变化,v-for view内容不更新的问题。

  以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: