vue渲染不出来,vue阻止页面渲染

  vue渲染不出来,vue阻止页面渲染

  本文主要介绍了Vue渲染失败的几种原因及解决方法,具有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。

  

目录

   Vue渲染失败的原因及解决方法1。假设模板2。因为Vue检测不到属性3的添加和删除。对于数组Vue渲染错误,Vue报错并解决。

  

Vue渲染失败原因及解决

  在数据双向绑定中,经常会遇到当数据发生变化时,页面没有同步呈现的情况。

  首先Vue 的数据双向绑定原理 是分为

  1.observe2.deps3.watcher在observe中,所有的属性都会通过Object.keys()来获取,将一个订阅者推送到deps,

  

一.假设template中

  我在created的hook函数中定义了this.a=1,在btn中添加了事件change this.a。这时,我观察到页面没有被渲染。

  模板

  div{{a}}

  button @ Click= fnb TN Click/button

  /div

  /模板

  原因:Vue无法检测属性的添加或删除。因为Vue将在初始化实例时对属性执行getter/setter转换,所以属性必须存在于数据对象上,Vue才能将其转换为responsive。

  解决:

  在data中定义属性A,点击按钮,页面会同步呈现。

  data(){

  返回{

  答:1

  }

  },

  

二.因为Vue无法检测到属性的添加和移除

  所以以下操作,页面也没办法同步渲染

  模板

  差异

  p v-for=(value,key) in obj

  {{value}}

  /p

  button @ Click= fnb TN Click/button

  /div

  /模板

  data(){

  返回{

  目标

  答:1,

  乙:2

  }

  }

  },

  fnbtn(){

  this.obj.c=3

  },

  解决:

  1.在数据中,obj的默认生成定义了一个c,obj:{ a:1,b:2,c:}。如果直接呈现,将呈现一个空的dom元素,因此最好在计算的。

  计算值:{

  objFilter(){

  let new obj=JSON . parse(JSON . stringify(this . obj))

  for(let key in newObj){

  如果(!newObj[key]){

  删除newObj[key]

  }

  }

  返回newObj

  }

  },

  2.上面的方法比较麻烦,Vue提供了原生方法来处理。此方法可以向嵌套对象添加响应属性。

  这个。$set(this.obj, c ,3)

  3.如果要删除属性B,直接使用this.obj.b= ,但是最好结合计算属性的方法,避免产生无用的标签。此外,Vue还可以通过采用另一种方法来达到预期的效果。

  this.obj=Object.assign({},{ a: 1})

  相当于再次为obj指向一个新对象,此时查看控制台中没有空标签。

  

三. 对于数组

  当您直接更改arr[i]的值时,它不会触发响应呈现。

  p v-for=i in arr

  {{i}}

  /p

  This.arr[0]=8 //此时,数组确实发生了变化,但是不会触发响应呈现。

  原因:

  Vue无法检测到以下阵列中的更改:

  直接按索引设置数组项时,例如:vm.items[indexOfItem]=newValue修改数组长度时,例如:VM . items . length=new length解决:

  1.用上面这个。$set方法。

  这个。$set(this.arr,0,8) //因为数组也可以理解为key为索引{0:1,1:2,2:3,3:4}的对象

  采用拼接

  splice(indexOfItem,1,newValue)

  下面的方法可以通过操作数组来触发响应,直接给数组重新赋值也可以触发响应(this.arr=newArr)。

  1.按()2。Pop () 3。Shift () 4。Unshift () 5。拼接(Splice)拼接6 .排序(sort)分类… 7 .反转(reverse)反转。以上是容易导致渲染错误的几种情况和解决方法。当数据发生变化,页面没有呈现时,就需要分析数据响应的哪一步出现了问题。

  扩展:异步更新(即当数据发生变化且尚未渲染到dom时,此时要获取的dom元素的值为旧值)

  你可以用这个。$nextTick(fn(){})获取新值。

  这个。$nextTick(fn(){})返回一个Promise对象,因此它可以与async await结合使用。

  

Vue渲染错误问题

  

Vue 报错

  [Vue warn]:呈现错误:" TypeError:无法读取undefined的属性" 1 "

  

原因

  组件,请使用异步加载数据来呈现该组件。当组件第一次被呈现时,数据对象还没有被分配。此时,由于缺少数据,组件渲染将报告一个错误。

  

解决

  使用v-if控件,组件将不会被呈现,直到异步获得数据。

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

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

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