#javascript #vue.js #axios
#javascript #vue.js #axios
Вопрос:
Мне нужно отправить форму, используя вычисляемое свойство в Vue.js . end_saving
Вычисляется из start_saving
и duration
. Мне нужно использовать saving.end_saving
in v-model
, чтобы я мог отправить значение в методе POST через Axios.
<template>
......
<b-form-datepicker
locale="id"
:value="endSaving"
@input="saving.end_saving= $event.target.value"
></b-form-datepicker>
......
</template>
....
data() {
return {
saving: {
start_saving: "",
duration: "",
end_saving: "",
},
computed: {
endSaving: {
get: function () {
return moment(this.saving.start_saving)
.add(this.saving.duration, "days")
.subtract(1, "days")
.format("YYYY-MM-DD");
},
set: function (newValue) {
return (this.saving.end_saving = newValue);
},
},
},
methods: {
submitForm() {
axios
.post("/api/saving", this.saving)
.then(
(response) =>
(window.location.href = `/saving/${response.data.id}`)
)
.catch((error) => console.log(error));
},
}
Но каждый раз, когда я отправляю форму, end_saving
всегда null
.
Комментарии:
1. Это довольно запутанно. Какие свойства должны быть доступны для редактирования пользователем в пользовательском интерфейсе? Где находятся
start_saving
иduration
присвоенные значения?2. Я чувствую, что ваш параметр для
endSaving
должен быть простоset: function(newValue) {this.saving.end_saving = newValue}
. Это еще не тестировалось.3. @Phil ya есть форма ввода для start_saving и duration
4. @Phil В форме есть 3 входных параметра: start_saving, duration и end_saving. значение end_saving только для чтения, значение из start_saving duration. Таким образом, пользователь может просто ввести, чтобы начать сохранение и продолжительность
5. Если он доступен только для чтения, почему вы добавили для него средство выбора даты?
Ответ №1:
Похоже, вам было бы лучше вычислить весь savings
объект целиком.
Например
data: () => ({
start_saving: "",
duration: 0
}),
computed: {
saving: ({ start_saving, duration }) => ({
start_saving,
duration,
end_saving: moment(start_saving).add(duration - 1, "days").format("YYYY-MM-DD")
})
}
Затем привяжите ваши два ввода формы к start_saving
и duration
<b-form-datepicker
locale="id"
v-model="start_saving"
></b-form-datepicker>
<input type="number" v-model.number="duration">
и используйте this.saving
в своем POST-запросе Axios (как у вас сейчас)
axios.post("/api/saving", this.saving)