Как я могу получить значение :из входных данных с помощью Vuejs?

#vue.js

Вопрос:

Привет, у меня есть такой список:

 <tr v-for="(post, index) in posts" v-bind:index="index">
    <td>{{ post.rut }}</td>
    <td>{{ post.names }} {{ post.father_lastname }} {{ post.mother_lastname }}</td>
    <td>
       <input type="number" class="form-control" id="exampleInputEmail1" v-bind:value="post.employee_id" @input="form.amount[post.employee_id]" placeholder="Ingresa el monto">
    </td>
</tr>
 

Я определил в v-bind:значение=»» начальное значение для каждого ввода списка, затем мне нужно отправить эти данные с помощью axios, но когда я это делаю, он ничего не отправляет, я имею в виду, что я не могу поймать значение для каждого ввода, почему? потому что он отображает значение.. мой axios-это:

 onSubmit(e) {
     this.loading = true; //the loading begin
     e.preventDefault();
     let currentObj = this;

     const config = {
                headers: { 'content-type': 'multipart/form-data' }
            }

            let formData = new FormData();
            formData.append('amounts', JSON.stringify(this.form.amount));

            axios.post('/api/payroll_management/store?api_token=' App.apiToken, formData, config)
            .then(function (response) {
                currentObj.success = response.data.success;
            })
            .catch(function (error) {
                console.log(error);
            });
        }
 

поэтому мне интересно, как я могу получить данные из входных данных? если он вернет пустую эту.форму.сумму

Спасибо

Комментарии:

1. Установите значения по умолчанию в form.amount массиве и позвольте Vue обрабатывать изменения с @input помощью атрибута. (См. Документацию .) И удалите v-bind:value атрибут, это нарушает @input директиву.

Ответ №1:

Поскольку каждая запись имеет amount значение , которое изменяется вместе с <input> , проще, чтобы это значение было частью самого post элемента.

Это делается с помощью v-model="post.amount" (см. Документацию) на <input> каждом post из них .

Таким образом, существует единственное место, где находится значение суммы и где оно обновляется.

Затем, когда вы отправляете форму, вы можете получить массив значений этих сумм с помощью вычисляемого свойства (см. Документацию).

Для лучшего понимания происходящего я настоятельно рекомендую ознакомиться с документацией VueJS, так как она очень удобочитаема и все довольно хорошо объясняет.

Теперь, собрав все это воедино, взгляните на этот пример:

 new Vue({
  el: "#app",
  data: {
    posts: [
      {
        rut: "A",
        names: "Name Name",
        father_lastname: "Lastname",
        mother_lastname: "Lastname2",
        employee_id: 5,
        amount: 5, // Default value here
      },
      {
        rut: "B",
        names: "Name Name",
        father_lastname: "Lastname",
        mother_lastname: "Lastname2",
        employee_id: 2,
        amount: 2, // Default value here
      },
    ],
  },
  computed: {
    // Make form data a computed object.
    form: function() {
      // Get only the amount values from the posts.
      // The inputs will update those automatically,
      // so these will change as well.
      let amount = this.posts.map((post, idx) => {
        return parseInt(post.amount); // parseInt() is optional here
      });
      
      return {
        amount: amount,
        // ... other stuff
      };
    },
  },
  methods: {
    getFormData: function() {
      console.log( JSON.stringify(this.form.amount) );
    }
  }
}) 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<div id="app">
<h2>Posts:</h2>
<table>
    <tr v-for="(post, index) in posts" v-bind:index="index">
        <td>{{ post.rut }}</td>
        <td>{{ post.names }} {{ post.father_lastname }} {{ post.mother_lastname }}</td>
        <td>
             <input type="number" class="form-control" v-model="post.amount">
        </td>
    </tr>
</table>
<br/>
<button v-on:click="getFormData()">Console log form data</button>

</div> 

Комментарии:

1. ТАЙ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!