Директива Vue v-model
является синтаксическим сахаром над v-bind:value
и v-on:input
. Эта статья alligator.io очень помогла мне понять, как она работает.
Итак, в основном ваша проблема в том, что директива v-model
устанавливает value
на firstname
, пока вы 'Также явно установите value
в user.firstName
.
Существует много способов решения этой проблемы.Я думаю, что быстрое и простое решение состоит в том, чтобы сохранить firstname
в качестве переменной данных (как вы уже делаете), а затем использовать только v-model
с ней, не учитывая v-bind:value
.
Тогда,чтобы установить пользователя из хранилища для имени пользователя по умолчанию, вы можете установить fristname
в качестве имени пользователя хранилища в created
hook:
script:
<script>
import { mapGetters, mapActions } from 'vuex';
export default {
created() {
this.firstname = this.user.username; // is this right? no used to the map getters syntax, but this is the idea
},
data () {
return {
lang: "",
firstname: ""
}
},
computed: mapGetters([
'user'
]),
methods: {
...mapActions([
'updateUserProfile'
]),
onChangeLanguage () {
this.$i18n.locale = lang;
},
// Function called when user click on the "Save changes" btn
onSubmit () {
console.log('Component(Profile)::onSaveChanges() - called');
const userData = {
firstName: this.firstname
}
console.log('Component(Profile)::onSaveChanges() - called', userData);
//this.updateUserProfile(userData);
},
// Function called when user click on the "Cancel" btn
onCancel () {
console.log('Component(Profile)::onCancel() - called');
this.$router.go(-1);
}
}
}
</script>