我正在构建一个受控组件(一个组件是父组件,另一个是子组件)。父组件是 SurveyContainer,子组件是 SurveyPage1。在 SurveyContainer 中,我有一个模型对象surveyModel 和嵌套对象surveyModel.topPreferencesObj,我想在SurveyPage1 中对其进行初始化。所以我将这个对象作为道具传递。
<template>
<div>
<SurveyPage1
v-bind:prefObj="this.surveyModel.topPreferencesObj"
@handle-change="this.handleChange(arg)" >
</SurveyPage1>
</div>
@Component({
components: {
SurveyPage1
}
})
export default class SurveyContainer extends Vue {
mounted(){
}
surveyModel = {
topPreferencesObj : {
option1: false,
option2: false,
option3: false,
option4: false,
other:""
}
}
handleChange(payload:any) { // this never fires
this.surveyModel.topPreferencesObj = payload;
}
}
这是调查页面 1。在这里,我收到属性对象。另外在这里,我有一块手表,每次发生变化时都会触发。因此,当它触发时,我想发出,以便父组件知道该属性已更新。但是在 watch 函数中我得到TypeError: Cannot read property 'handle-change' of undefined 我是 vuejs 的新手,我现在真的很着急。我在互联网上搜索,它看起来应该可以工作,但它没有。
<template>
<div>
<h2>Survey Page 1</h2>
<v-checkbox v-model="prefObj.option1" label="" >
</v-checkbox>
</div>
</template>
<script lang="ts">
import { Component, Vue,Prop ,Watch} from 'vue-property-decorator';
@Component
export default class SurveyPage1 extends Vue {
@Prop({required: true})
prefObj:any;
computed(){
debugger;
const blah = this.prefObj;
}
@Watch('prefObj', { immediate: true, deep: true })
onPrefObjChanged = (val: any, oldVal: any) => {
debugger;
this.$emit('handle-change', this.prefObj); // here I get the error: handle-change undefined
}
}
</script>
谢谢。