当前位置: 首页 > 知识库问答 >
问题:

this - vue2 中 data 数据定义为 data的数据时, 方法里会取不到data?

单于奇略
2024-03-29

vue2(2.16.14) 中 data 数据定义为 data(this.xxx)的数据时, 方法里会取不到data?

这是一个有趣的问题,我暂时还没有去探究原因,不过可以给大家避坑。

我有个 test.vue 组件

<template>  <div class="test">  </div></template><script>export default {  name: 'test',  data () {    return {      tabList: [{        label: '哈哈哈', value: 'hahaha'      }, {        label: '嘿嘿嘿', value: 'heiheihei'      }],      tab: this.tabList[0].value,    }  },  created() {    console.log(this.tabList);    this.show("created");  },  methods: {    show(form) {      console.log(`来自 ${ form }-- show被调用: `, this, 'tabList: ', this.tabList, 'tab: ',this.tab, 'method: ', this.test);    },    test() {      console.log(1111);    }  }}</script><style scoped lang="scss"></style>

我在其父组件中通过 this.$refs.test.show('父组件') 调用该方法时发现 this.data 为undefined,后面发现组件自身调用也存在这个问题。
image.png

image.png

然而方法却能取到,暂时做个记录(如有大佬帮忙解开迷雾,十分感谢。

共有2个答案

薛淮晨
2024-03-29

this指的是什么?是不是当前vue实例?
this.tabList指的是什么?是不是data()returntabList属性?
在还没return的对象里访问对象中的属性会怎样?会收获undefined is not an object (evaluating 'this.tabList[0]')报错一枚。
这与vue无关,你的行为就好似下面这段JS:

var data = {    tabList: [{      label: '哈哈哈', value: 'hahaha'    }, {      label: '嘿嘿嘿', value: 'heiheihei'    }],    tab: data.tabList[0].value}
穆景辉
2024-03-29

在data函数中不能使用this

tab: this.tabList[0].value,
这一行出错导致data构造时出现异常。这个问题注意一下console的报错,应该有报错。

 类似资料:
  • 在本章中,我们将向您展示如何阅读Firebase数据。 下图显示了我们要读取的数据。 我们可以使用on()方法来检索数据。 此方法将事件类型视为"value" ,然后检索数据的snapshot 。 当我们将val()方法添加到快照时,我们将获得数据的JavaScript表示。 例子 (Example) 让我们考虑以下示例。 var ref = firebase.database().ref();

  • 双向绑定是Angular JS中的一项功能,但已从Angular 2.x开始删除。 但是现在,自Angular 2中的类事件发生以来,我们可以绑定到AngularJS类中的属性。 假设您有一个具有类名的类,一个具有类型和值的属性。 export class className { property: propertytype = value; } 然后,您可以将html标记的属性绑定到类的

  • 每个ASP.NET Web表单控件都从其父Control类继承DataBind方法,这为其提供了将数据绑定到至少一个属性的固有功能。 这称为simple data binding或inline data binding 。 简单数据绑定涉及将实现IEnumerable接口的任何集合(项集合)或DataSet和DataTable类附加到控件的DataSource属性。 另一方面,某些控件可以通过Da

  • Aurelia拥有自己的数据绑定系统。 在本章中,您将学习如何将数据与Aurelia绑定,并解释不同的绑定机制。 简单的绑定 您已经在我们之前的一些章节中看到了简单的绑定。 ${...}语法用于链接veiw模型和视图。 app.js export class App { constructor() { this.myData = 'Welcome to Aurelia app

  • 什么是数据绑定? 数据绑定是一个对象的数据与另一个对象相关联的过程。 它需要一个源属性,一个目标属性和一个触发事件,指示何时将数据从源复制到目标。 Flex提供了三种方法来执行数据绑定,如下所示 MXML脚本中的卷曲大括号语法({}) MXML中的标记 BindingUtils in ActionScript 数据绑定 - 在MXML中使用卷曲括号 以下示例演示如何使用花括号指定源到目标的数据绑定

  • Data Binding API用于使用属性访问器或使用注释将JSON转换为POJO(Plain Old Java Object)和从POJO(Plain Old Java Object)转换JSON。 它有两种类型。 Primitives Data Binding - 将JSON转换为Java地图,列表,字符串,数字,布尔值和NULL对象。 Objects Data Binding - 将JSO