“属性或方法“ foo”未在实例上定义,但在渲染过程中被引用” Vuejs Typescript

时间:2018-10-26 07:01:41

标签: typescript vue.js v-model

  

在实例上未定义属性或方法“ foo”   但在渲染期间引用。确保此属性是   在data选项中或对于基于类的组件,通过   初始化属性。

我曾经使用过vuejs,现在由于尝试访问一个简单的属性并使之具有响应性,我正转向打字稿来解决这个问题。

有人问过类似的问题,但尚未解决: Vue Class Based Component Warning: Property is not defined on the instance but referenced during render

<template>
    <section class="dropdown" style="background-color: #dde0e3">
      <select class="btnList" v-model="foo">
        <option v-for="item in selectedfooData" :value="item" :key="item.id">{{item}}</option>
      </select>
      {{foo}}
    </section>
</template>

<script lang="ts">
 import { Component, Prop, Vue } from 'vue-property-decorator';
 @Component
 export default class HelloWorld extends Vue {  
   private foo: string;
     private selectedfooData : string[] = [
     'one',
     'two'
     ]
 }
</script>

我已经尝试通过将属性添加为prop来解决此问题,但这给了我错误提示:那么,什么是正确的尝试方法?

  

避免直接更改道具,因为该值将被覆盖   每当父组件重新渲染时。而是使用数据或   根据属性值计算属性。道具被突变:   “ foo”

 @prop()
 private foo: string;

1 个答案:

答案 0 :(得分:0)

这是解决此问题的方法,需要添加构造函数并在构造函数中初始化属性

<template>
<section class="dropdown" style="background-color: #dde0e3">
  <select class="btnList" v-model="foo">
    <option v-for="item in selectedfooData" :value="item" :key="item.id">{{item}}</option>
    </select>
    {{foo}}
  </section>
</template>

<script lang="ts">
  import { Component, Prop, Vue } from 'vue-property-decorator';
  @Component
  export default class HelloWorld extends Vue {  
  private foo: string;
  private selectedfooData : string[] = [
   'one',
   'two'
  ]
  construtor() { 
    super();
    this.foo = '';
  }

 }
</script>