在实例上未定义属性或方法“ 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;
答案 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>