简体   繁体   English

无法在 Vue 中使用计算的 setter 更改状态

[英]Can't change the state using computed setter in Vue

I need to submit a form using computed property in Vue.js.我需要使用 Vue.js 中的计算属性提交表单。 The end_saving is computed from start_saving and duration . end_saving是根据start_savingduration计算的。 I need to use saving.end_saving in v-model so I can submit the value in a POST method via Axios.我需要在v-model使用saving.end_saving以便我可以通过 Axios 在 POST 方法中提交值。

<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));
 },
}

But, every time I submit the form, the end_saving is always null .但是,每次我提交表单时, end_saving总是null

Sounds like you would be better off computing the entire savings object.听起来你最好计算整个savings对象。

For example例如

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")
  })
}

Then bind your two form inputs to start_saving and duration然后将您的两个表单输入绑定到start_savingduration

<b-form-datepicker
  locale="id"
  v-model="start_saving"
></b-form-datepicker>

<input type="number" v-model.number="duration">

and use this.saving in your Axios POST request (like you currently have)并在您的 Axios POST 请求中使用this.saving (就像您目前拥有的那样)

axios.post("/api/saving", this.saving)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM