【问题标题】:vue js send data to apivue js 向api发送数据
【发布时间】:2021-09-21 08:05:10
【问题描述】:

我正在尝试将数据发送到 api 端点,但我用来触发操作的方法没有获取用户 ID 和表单数据。

我有一个用于通过 api 更新用户信息的表单。在有人输入新信息之前,我会获取用户信息并将其显示为占位符文本。我正在尝试将数据发送到端点,但该方法没有获取用户 ID 和表单数据。 [[编辑用户详细信息]]。这是代码

import axios from "axios";
export default {
  name: "Edit",
  data() {
    let userId = this.$route.params.id;
    this.getUserDetails(userId);
    this.editUserDetails(userId);
    console.log(userId);
    return {
      userDetails: {},
      formdata: {
        name: '',
        occupation: '',
        email: '',
        bio: '',
      },
    };
  },
  methods: {
    getUserDetails(id) {
      console.log(id);
      axios
        .get(`https://607e868602a23c0017e8b79e.mockapi.io/api/v1/users/${id}`)
        .then((response) => {
          this.userDetails = response.data;
        })
        .catch((error) => {
          console.log(error);
        });
    },
    editUserDetails(id) {
      console.log(this.formdata);
      console.log(id);
      axios
        .patch(`https://607e868602a23c0017e8b79e.mockapi.io/api/v1/users/${id}`, this.formdata)
        .then((response) => {
          console.log(this.formdata);
          console.log(response);
        })
        .catch((error) => {          
          console.log(this.formdata);
          console.log(error);
        });
    },
  },
};

这是我在更新之前用来从用户那里收集数据的表单

 <form @submit.prevent="editUserDetails(id)">
          <div class="container">
            <div class="row">
              <div class="label col-2"><label for="">ID: </label></div>
              <div class="text col-8">
                <span v-bind="formdata.id">{{ userDetails.id }}</span>
              </div>
            </div>
            <div class="row">
              <div class="label col-2"><label for="name">Name: </label></div>
              <div class="datas col-8">
                <input
                  class="input"
                  id="name"
                  type="text"
                  v-bind="formdata.name"
                  :placeholder="[[userDetails.name]]"
                />
              </div>
            </div>
            <div class="row">
              <div class="label col-2">
                <label for="occupation">Occupation: </label>
              </div>

              <div class="datas col-8">
                <input
                  class="input"
                  id="occupation"
                  type="text"
                  v-bind="formdata.occupation"
                  :placeholder="[[userDetails.occupation]]"
                />
              </div>
            </div>
            <div class="row">
              <div class="label col-2"><label for="email">Email: </label></div>

              <div class="datas col-8">
                <input
                  class="input"
                  id="email"
                  type="text"
                  v-model="formData"
                  v-bind="formdata.email"
                  :placeholder="[[userDetails.email]]"
                />
              </div>
            </div>
            <div class="row">
              <div class="label col-2"><label for="bio">Bio: </label></div>

              <div class="datas col-8">
                <textarea
                  class="input"
                  name=""
                  id="bio"
                  cols="60"
                  rows="4"
                  v-bind="formdata.bio"
                  :placeholder="[[userDetails.bio]]"
                ></textarea>
              </div>
            </div>
          </div>
          <button>Submit</button>
        </form>

可能是什么问题...

【问题讨论】:

    标签: vue.js axios vuejs3


    【解决方案1】:

    这就是我设法解决它的方法。我将表单输入修改为如下所示

                <div class="row">
                  <div class="label col-2"><label for="name">Name: </label></div>
                  <div class="datas col-8">
                    <input
                      class="input"
                      id="name"
                      type="text"
                      v-model="formdata.name"
                      :placeholder="[[userDetails.name]]"
                    />
                  </div>
                </div>
    

    然后我把js方法改成这个样子

      data() {
        let userId = this.$route.params.id;
        this.getUserDetails(userId);
        return {
          userDetails: {},
          formdata: {
            name: "",
            occupation: "",
            email: "",
            bio: "",
          },
        };
      },
    
    methods: {
        editUserDetails(id) {
          let userId = this.$route.params.id;
          axios
            .patch(
              `https://ti-react-test.herokuapp.com/users/${userId}`,
              {
                "name": this.formdata.name,
                "email": this.formdata.email,
                "occupation": this.formdata.occupation,
                "bio": this.formdata.bio
              }
            )
            .then((response) => {
              console.log(response.data);
            })
            .catch((error) => {
              console.log(error);
            });
        },
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-20
      • 2018-02-12
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多