从方法访问 vue 组件中的数据

Posted

技术标签:

【中文标题】从方法访问 vue 组件中的数据【英文标题】:Accessing data in a vue component from methods 【发布时间】:2018-11-03 11:39:00 【问题描述】:

我目前在正确上下文的 VueJs 组件中使用“this”时遇到问题。 我已经阅读了很多答案,主要是指不使用箭头函数。正如您在我附加的代码块中看到的那样,我已经用常规的箭头函数替换了箭头函数,嗯......上下文现在不同了,但是关于错误消息


“TS2339:属性 'answer1' 在类型 ' receiveValues(value1: string, value2: string): void; test(): string; ' 上不存在。”
上下文现在是方法对象。 我现在在这个问题上浪费了很多时间,我真的不知道该怎么办。所以我的问题是,我怎样才能获得正确的上下文来访问数据?我感谢每一个帮助和提示!我将 ts 编译器与 ES2015 一起使用。
代码:
export default 
name: 'app',
components: 
  Editor,
  Chart,
,
methods: 
  receiveValues(value1: string, value2: string) 
    console.log(value1); 
    this.answer1 = value1; // This is where the error is thrown
    console.log('receiveValues ' + this.test()); // this works just fine
  ,
  test() 
    console.log('blablabla');
    return 'did it';
  ,
,
data() 
  return 
    content: 'I\'m Test Content!',
    answer1: '',
    answer2: '',
    answer3: '',
    answer4: '',
  ;
,


与this post 不同,例如,我的“this”上下文仅引用方法对象,因此我只能调用其函数,而不能调用来自组件本身的数据。

【问题讨论】:

What is Vue way to access to data from methods?的可能重复 感谢您链接这篇文章。作者能够在组件上下文中使用“this”。我的问题是,“this”的上下文仅指方法对象。 你试过访问this.$data.answer1吗? 是的,我刚试过一分钟。 "TS2339: 属性 '$data' 在类型 ' receiveValues(value1: string, value2: string): void; test(): string; ' 上不存在。" 你是使用 Vue.extend 还是组件生成器在 Typescript 中声明你的组件?看起来你只是在不正确的 Vue 组件中使用像 javascript 中的普通对象。 【参考方案1】:

如果你在 vuejs 中遇到 ts2339 错误,同时使用 typescript 和基于对象的方式:

export default

检查以下步骤:

    首先你应该将 lang 设置为 "ts

    接下来你应该导入 vue

    import Vue from "vue";

    使用 export default Vue.extend 代替 export default

    export default Vue.extend( name: "app" as string, )

    检查您是否在此组件中使用了任何基于普通旧对象的 mixin,如果您尝试上面的步骤(2,3),它将解决问题。 (考虑您的 mixin.js 应该更改为 mixin.ts 以作为有效的打字稿文件)

【讨论】:

【参考方案2】:

Max Sinev 对一个答案的评论确实帮助了我,但可能很容易被其他人忽略,所以我重新发布:

你是否使用 Vue.extend 或组件生成器在 Typescript 中声明你的组件?看起来你只是在不正确的 Vue 组件中使用像 javascript 中的普通对象

我不小心使用了一个普通的对象,并且看到了各种各样的问题。更改为Vue.extend() 将所有内容整理好。

【讨论】:

【参考方案3】:

致所有和我有同样问题的人:我仍然不知道为什么我无法使用“this”访问正确的上下文,但我找到了一个适合我的解决方案:


我对来自Vue Class Component 的类文件使用了打字稿装饰器,现在它可以工作了!在我看来,代码更容易编写和清洁! 感谢@Michał Perłakowski 和@Max Sinev 的帮助。

【讨论】:

以上是关于从方法访问 vue 组件中的数据的主要内容,如果未能解决你的问题,请参考以下文章

访问 vue.js 模板中的 php 数组

vue组件data return中的数据怎么相互访问

准备好使用 Vue.js 访问子组件中的 api 数据

Vue JS 访问“父组件的兄弟组件”的对象

Vue3 从控制台访问组件数据属性

如何在组件的方法中访问 Vue JS 道具?