Не приходят данные в поле через v-model в Едит странице
В контроллере передаю юзер через пропс, во вью странице указываю пропс. При рендеринге все данные выходят но только когда что то изменяешь в странице: пишешь что то в поле или делаешь рендеринг. Вот мой едит метод в контроллере и вью страница
public function edit()
{
$user=Auth::user();
return Inertia::render('Client/UserFamily/UserProfileEdit',[
'user' => $user,
]);
}
<template>
<head>
<title>User | Main Information</title>
</head>
<AdminLayout>
<template #breadcrumbs>
<div class="row mb-2">
<div class="col-sm-6">
<h1 class="m-0">User</h1>
</div>
</div>
</template>
<div class="container-fluid">
<div class="card card-primary">
<form method="post" @submit.prevent="submit">
<!-- <pre>{{ user }}</pre> -->
<div class="mb-3">
<label for="name" class="form-label">Имя</label>
<input v-model="user.name" type="text" class="form-control" id="name" required />
</div>
<div class="mb-3">
<label for="name" class="form-label">Фамилия</label>
<input v-model="user.surname" type="text" class="form-control" id="name" required />
</div>
<div class="mb-3">
<label for="email" class="form-label">Электронная почта</label>
<input v-model="user.email" type="email" class="form-control" id="email" required />
</div>
<div class="mb-3">
<label for="phone" class="form-label">Телефон</label>
<input v-model="user.phone" type="text" class="form-control" id="name" required />
</div>
<div class="mb-3">
<label for="sex" class="form-label">Пол</label>
<select v-model="user.sex" class="form-control" id="sex" required>
<option :value="0">Женский</option>
<option :value="1">Мужской</option>
</select>
</div>
<div class="mb-3">
<label for="country" class="form-label">Страна</label>
<select v-model="user.country" class="form-control" id="country" required>
<option v-for="country in countries" :key="country.name" :value="country.name">
{{ country.name }}
</option>
</select>
</div>
<div class="card-footer">
<button type="button" class="btn btn-primary mr-1" @click.prevent="updateProfile()">
Сохранить
</button>
<button type="button" class="btn btn-danger" @click.prevent="back()">
Назад
</button>
</div>
</form>
</div>
</div>
</AdminLayout>
</template>
<script>
import AdminLayout from '../../../Layouts/AdminLayout.vue';
import { Link, Head } from "@inertiajs/inertia-vue3";
import Pagination from "../../../Components/Pagination.vue";
import ValidationError from "../../../Components/ValidationError.vue";
export default {
components: {
AdminLayout,
Link,
Pagination,
ValidationError,
Head
},
props: ["user", "countries"],
data() {
return {
}
},
created() {
this.$store.dispatch('fetchUser');
},
computed: {
userData() {
return this.$store.getters.getUserData.user;
}
},
// watch: {
// user: {
// handler(newUser) {
// console.log("User updated:", newUser);
// },
// deep: true,
// immediate: true
// }
// },
mounted() {
console.log("Полученные данные:", this.user);
},
// mounted() {
// console.log("Selected country:", this.user.country);
// console.log("Countries list:", this.countries);
// },
methods: {
updateProfile() {
this.$inertia.put(route('profile.update'), this.form)
.then(() => {
this.$inertia.reload();
})
.catch(error => {
console.error(error);
});
},
},
};
</script>
Ответы (1 шт):
Автор решения: Виктор Карев
→ Ссылка
У вас компонент отслеживает изменение user. Но изменение user.name, например, не является изменением user. Можно либо навесить дополнительное отслеживание (что, впрочем считается плохим стилем):
watch {
'user.name': function(){},
'user.surnamename': function(){},
...
}
либо передавать в компонент сами обрабатываемые поля:
props: ["username", "usersurname", ..., "countries"]