在Vue 中调用数据出现属性不存在的问题

这已经是我在调用数据时趟过几次的坑了,索性记录下来防止后面再犯;

一般我们请求数据来渲染一个页面的时候,请求下来的数据基本上都是数组或是对象,再通过列表循环和插值表达式渲染的页面;在data 中提前声明接收数据的变量时若为指定类型,就直接将数据渲染到页面,在浏览器的控制台基本上都会出现 “某某属性未定义” 的英文报错;下面举个例子:

先假设请求的是下面的json 数据:

{
  "code": 0,
  "data":[
    {
      "name": "Buccky",
      "age": 16,
      "score": 77
    },
    // 。。。。。
  ]
}

数据请求下来将data的学生分数选项 存到 scoreInfo中,如下:

new Vue({
  data(){
    return {
      scoreInfo: []
    }
  }
})

这里为了说明问题,不用列表渲染,我们只取第一条数据中的name进行渲染,如果像这样下面这样写的话,就会出现上面说的那种报错:

...
<span>{{ scoreInfo[0].name }}</span>

这样写后,浏览器的控制台就会报错,告诉name 这个属性未定义,究其原因是,我们一般请求数据,虽然在这个组件实例创建的时间就已经请求了,但是,请求数据,一般都是使用异步的,在页面渲染时最开始时,scoreInfo: [] 仅仅是个空数组,故会报name 这个属性确实不存在错误提示;

解决办法:

new Vue({
  data(){
    return {
      scoreInfo: [{}]   // 在空数组中加一个空对象
    }
  }
})

当然我们平时请求的数据,不会这么简单,这里在将要请求的数简单修改一下:

  "code": 0,
  "data":[
    {
      "name": "Buccky",
      "age": 16,
      "score": 77,
      "teacher": {
        "name": "Miss Li",
        "age": 24,
      }
    },
    // 。。。。。
  ]
}

此时需要将老师的名字渲染出来:

<span>{{ scoreInfo[0].teacher.name }}</span>

要想不报错,还需要像如下修改一下 scoreInfo:

new Vue({
  data(){
    return {
      scoreInfo: [{teacher:{}}]
    }
  }
})

当然,还可以将数据改的更为复杂,但只需按照这个思路,就可以轻松的解决了

原文地址:https://www.cnblogs.com/pingzx/p/10884212.html

时间: 2024-07-28 14:51:40

在Vue 中调用数据出现属性不存在的问题的相关文章

Vue中给自定义属性添加属性

定义组件时,如果是需要参数传递则,将要传递的参数放在`props`中,`props`可以是一个数组也可以是一个字典,字典中可以定义是否是必须传递和参数的类型.如下: porps:{ books:{ type: Array, required: true, default: '四大名著' } } 在传参时,需要在参数前加":"以示是动态数据而非静态数据.如下: <book-template :books='books'></book-template> 单一根元素

php中调用类的属性和函数的方法-&gt;_=&gt;_::_$this-&gt;区别

在php中有同学经常搞不明白->,=>,::,$this->的作用,下面通过例子讲解下. 一.->用来引用一个类的属性(变量).方法(函数) 可以把->理解成调用的意思 如: <?php Class a{ Var $id; Function add(){ $this->id="test"; echo "abc"; } } $b = new a; $b->add();  //调用类a中的add()方法, 输出为abc E

vue中访问数据接口的配置

业务API接口地址: http://localhost:3816/api/ 前端UI浏览地址:http://127.0.0.1:8080/#/home 由于同源策略的问题: 需要配置代理: 在开发环境下配置如下:config/index.js assetsSubDirectory: 'static', assetsPublicPath: '/', proxyTable: { '/api': { //将www.exaple.com印射为/apis target: 'http://localhost

在vue中scss通过scoped属性设置局部变量如何设置框架样式

应用场景:在使用vue的大型单页应用页面中,我们可以通过使用scoped属性将当前组件的样式设置局部样式 界面被scoped局部化之后,不能覆盖界面里面的子组件样式,因为样式只对当前界面生效.(可以加/deep/解决) 原文地址:https://www.cnblogs.com/qdlhj/p/10405579.html

vue中v-model 数据双向绑定

表单输入绑定 v-model 数据双向绑定,只能应用在input /textare /select <div id="app"> <input type="text" v-model="msg"> <p>{{ msg }}</p> </div> <script src="vue.js"></script> <script> new

VBA 练习-从两个库中调用数据到活动表中

练习VBA Sub 入库() Dim basedb As String, cpdb As String, wb As Workbook, ws As Worksheet, curWs As Worksheet basedb = ThisWorkbook.Path & "\分析数据.xlsx" cpdb = ThisWorkbook.Path & "\成品抽检信息.xlsx" '分析数据库中提取 If Len(Dir(basedb)) = 0 Then

vue中8种组件通信方式

一.props / $emit 下面通过一个例子说明父组件如何向子组件传递数据:在子组件article.vue中如何获取父组件section.vue中的数据articles:['红楼梦', '西游记','三国演义'] // section父组件 <template> <div class="section"> <com-article :articles="articleList"></com-article> <

简单了解:在内存中的数据

内存原理 开启电源,启动BIOS,CPU工作,调用内存,内存跟硬盘索要资源 当你点击一个文件的时候数据经过数据总线传达到CPU,CPU发送指令到内存,内存那里会跟硬盘沟通,问他有没有这个东西,他说有,你就会看到这个文件夹里面是什么东西. (Xee:RAM 是随机存取存储器,它的特点是易挥发性,即掉电失.--妈蛋,难怪一断电,我的东西没保存,就找不到了-- 既然内存是用来存放当前正在使用的(即执行中)的数据和程序,那么它是怎么工作的呢?我们平常所提到的计算机的内存指的是动态内存(即DRAM),动态

vue中引入mock.js

1.安装 npm i mockjs --save 2.直接在main.js里面引用,如图:(此处有坑,因为只在开发环境使用.if里面不能用import方式导入,只能用require方式引入) if (process.env.NODE_ENV !== 'production') require('./mock') 当项目启动后,mock会拦截他规则内的http请求 3.src下新建mock文件夹 index.js import Mock from 'mockjs' import { getUser