【发布时间】:2021-10-05 04:20:03
【问题描述】:
Vue 3
我正在尝试从 Axios 响应中更新数据变量的值。如果我在父组件中打印值,它会被打印并更新响应,但变量的值不会在子组件中更新。
我能弄清楚的是我的子组件没有收到更新的值。但我不知道为什么会这样。
input-field 是一个全局组件。
Vue 3
父组件
<template>
<input-field title="First Name" :validation="true" v-model="firstName.value" :validationMessage="firstName.validationMessage"></input-field>
</template>
<script>
export default {
data() {
return {
id: 0,
firstName: {
value: '',
validationMessage: '',
},
}
},
created() {
this.id = this.$route.params.id;
this.$http.get('/users/' + this.id).then(response => {
this.firstName.value = response.data.data.firstName;
}).catch(error => {
console.log(error);
});
},
}
</script>
子组件
<template>
<div class="form-group">
<label :for="identifier">{{ title }}
<span class="text-danger" v-if="validation">*</span>
</label>
<input :id="identifier" :type="type" class="form-control" :class="validationMessageClass" :placeholder="title" v-model="inputValue">
<div class="invalid-feedback" v-if="validationMessage">{{ validationMessage }}</div>
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
required: true,
},
validation: {
type: Boolean,
required: false,
default: false,
},
type: {
type: String,
required: false,
default: 'text',
},
validationMessage: {
type: String,
required: false,
default: '',
},
modelValue: {
required: false,
default: '',
}
},
emits: [
'update:modelValue'
],
data() {
return {
inputValue: this.modelValue,
}
},
computed: {
identifier() {
return this.title.toLowerCase().replace(/ /g, '-').replace(/[^\w-]+/g, '');
},
validationMessageClass() {
if (this.validationMessage) {
return 'is-invalid';
}
return false;
}
},
watch: {
inputValue() {
this.$emit('update:modelValue', this.inputValue);
},
},
}
</script>
【问题讨论】:
-
如果我没记错的话,你应该在子组件中使用
value而不是modelValue在我知道动作是input后发出,但认为它依赖于 vue 版本 -
你在哪里调用你的子组件?在您的父组件中,我只看到一个输入字段
-
@khofaai 如果他使用的是 Vue 3 (v3.vuejs.org/guide/migration/v-model.html),则不会
-
@jkoestinger 哎呀,他没有指定版本,我以为是第 2 版...谢谢指出
-
@jkoestinger 谢谢,我想确认一下,谢谢
标签: vue.js vue-component