vue项目的报错总结

一 vue的数据模型data报错

Snipaste_2020-05-19_14-35-15.png

原因
1.代码中某个写了变量 但变量没在data中声明,就会返回这个错误
2.也可能是后台没有返回该返回的数据,导致前端该赋值给data数据模型里变量的值为undefined,就会报这个错
可以debugger,并且将可疑的地方都打上断点,一一调试,就能排查出问题

二 报0为undefined情况

Snipaste_2020-08-05_15-05-25.png

出现这个错误的原因其实是Vue在拿到数据之前渲染了dom
一般情况下,是异步加载的时候,返回的某个数据返回异常为unfettered
debugger一下找出来即可
数据渲染页面时候, 某个属性未赋值,导致undefined

三 报1为undefined情况

这其实跟上面0的情况是一样的
具体可以看看vue的dom和数据的加载机制,下面的参考文章给出解释

[Vue warn]: Error in render: "TypeError: Cannot read property '1' of undefin

数据变量未在data中定义,但在creatd中直接赋值了,则报undefined

比如

created () {
    this.DetailList = this.$route.query
  },

// DetailList未在data中声明,所以报undefined

参考文章解释
https://blog.csdn.net/edc3001/article/details/86833558

四 使用echarts报错情况

image.png

<1>情况一 vue引入echarts后js报错 Cannot read property ‘getAttribute‘ of null

通俗理解:
是echars图标还没出来,数据现出来了

错误原因分析:

<1>html 元素还没加载或者代码还没有执行完就先执行了 echarts 的渲染,也就是代码执行前后顺序的问题。
<2>初始化 echarts 的 DOM 元素不存在。


在运行Vue项目时出现了上述错误,出现该错误的原因是Echarts的图形容器还未生成就对其进行了初始化所造成的

根据报错信息查找原因发现是因为 实例化echarts的元素不存在,查看官方文档代码示例:

// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('main'));

基于准备好的dom,初始化echarts实例,也就是只有 页面存在的HTML元素才可以去初始化。

如果不知道页面是否存在此HTML元素,那么在 实例化echarts前打印一下看看

console.log(document.getElementById('main'))

解决方案一: this.$nextTick

// 在echarts使用中,直接把setCharts()写到数据请求的方法中执行(这样使用问题可能的得不到解决,可在created使用nextTick)
            this.$nextTick(function () {
                this.setCharts();
            });

// 在created()使用可以解决上述bug问题
 created () {
     this.$nextTick(() => {
                 this.updateData();  // 该方法主要是拿数据
     })
  },
 

解决方案二:利用setTimeout()延迟加载(不推荐使用)

  setTimeout(() => {
     this.getChart();
  }, 1000);

<2>情况二 vue中使用echarts遇到Error in nextTick: "TypeError: Cannot read property 'getAttribute' of undefined"

vue this.nextTick(),这个函数可以做到数据更新之后等待Vue更新 DOM,DOM状态更新后进行一些操作
但是在created阶段使用了nextTick后,遇到报上述错误,则需要加个条件判断数据存在

解决:加一个判断 if (数据存在),再执行this.nextTick()方法
如果在created阶段使用了nextTick,则只需要判断数据是否存在再执行后续setChart的代码(这个方法主要初始化dom和画图)
例如

if(Data && BuyRate && SaleRate){
            this_.setChart(Data,BuyRate,SaleRate)
          }

setChart(Data,BuyRate,SaleRate) {
      let dollarChart = this.$echarts.init(this.$refs.dollarChart)
      let dollarOption = {
          tooltip: {
              trigger: 'axis'
          },
          legend: {
            type: 'plain',
            left: 'left',
            top:'12px',
            data: ['买入汇率', '卖出汇率']
          },
          xAxis: {
            type: 'category',
            axisLabel : {//坐标轴刻度标签的相关设置。
              interval:0,
              rotate:"45"
            },
            data: Data
          },
          yAxis: {
            type: 'value',
            max : 6.7,
            min : 6.3,
            splitNumber : 7
          },
          series: [
            {
              name: '买入汇率',
              data: BuyRate,
              type: 'line'
            },
            {
              name: '卖出汇率',
              data: SaleRate,
              type: 'line'
            }
          ]
        }
      dollarChart.setOption(dollarOption)
    },

你可能感兴趣的:(vue项目的报错总结)