【问题标题】:Vue / Laravel - Axios post multiple fieldVue / Laravel - Axios 发布多个字段
【发布时间】:2020-04-23 17:06:37
【问题描述】:

我创建了一个组件,它可以通过按一个按钮来添加其他字段。我不知道如何使用 axios.post 和 laravel 控制器将其提交到数据库中。过去我可以通过使用 jquery 和纯 laravel 来实现它,但是我很困惑如何在 vue 和 axios 中实现它。

Component.vue

<template>
  <v-app>
  <table class="table">
    <thead>
      <tr>
        <td><strong>Title</strong></td>
        <td><strong>Description</strong></td>
        <td><strong>File</strong></td>
        <td></td>
      </tr>
    </thead>  
    <tbody>
      <tr v-for="(row, index) in rows" :key="row.id">
        <td><v-text-field outlined v-model="row.title" /></td>
        <td><v-text-field outlined v-model="row.description" /></td>
        <td>
          <label class="fileContainer">
          <input type="file" @change="setFilename($event, row)" :id="index">
          </label>
        </td>
        <td><a @click="removeElement(index);" style="cursor: pointer">X</a></td>
      </tr>
    </tbody>
  </table>
    <div>
      <v-btn @click="addRow()">Add row</v-btn>
      <v-btn class="success" @click="save()">Save</v-btn>
      <pre>{{ rows | json}}</pre>
    </div>
  </v-app>
</template>

<script>
  export default {
    data: ()=> ({
      rows: []
    }),
    methods: {
      addRow() {
        var elem = document.createElement('tr');
        this.rows.push({
          title: "",
          description: "",
          file: {
            name: 'Choose File'
          }
        });
      },
      removeElement(index) {
          this.rows.splice(index, 1);
      },
      setFilename(event, row) {
        var file = event.target.files[0];
        row.file = file
      },
      save() {
        // axios.post
      }
    }
  }
</script>

Controller.php

 public function store(Request $request) 
{
  // store function
}

【问题讨论】:

    标签: laravel vue.js axios


    【解决方案1】:
     save() {
     let data = this.rows
              axios
                .post("Url", {
                    data
                })
                .then((res) => {
                   console.log(res);
                })
                .catch((err) => {
                    console.log(err)
                });
          }
    

    参考链接https://github.com/axios/axios

    【讨论】:

    • 非常感谢您。我现在收到一个 post 500 内部错误,我认为这是控制器中的错误。搜索后,我尝试了这段代码,似乎它不正确。公共函数存储(请求 $request){ $products = json_decode($request->data, true); foreach( $products as $product ) { EmployeeObjective::create([ 'kpi_info' => $product['title'], 'kpa_info' => $product['description'], ]); } }
    • 我给你的是 axios 解决方案而不是你的控制器解决方案你可以 dd() 你得到什么请求然后你可以相应地编写代码
    【解决方案2】:
    save() {
           axios
                .post("/your/uri", {
                    user_id: 1,
                    user_name:'jhone doe',
                    email:'test@test.com' 
                })
                .then(response => {
                   console.log(response);
                })
                .catch(error => {
                    console.log(error)
                });
          }
    

    您可以从您的控制器 $request-&gt;user_id,...,$request-&gt;email

    检索您的数据

    提示:如果您发布任何object,您必须JSON.stringify(your_json)它们并在来自控制器的响应数据中json_decode($your_json,true)或者你需要修改你的头文件。

    始终使用 '/your/uri' 而不是 /your/uri/ 而不是尾随 '/'

    【讨论】:

    • 请放弃投票,如果您认为这是您的答案,请将其标记为答案-我们将不胜感激。
    【解决方案3】:

    现在可以了。我将发布我的代码以防万一有人遇到同样的障碍。非常感谢 @kamlesh-paul@md-amirozzaman

    Component.vue

    <script>
      export default {
        data: ()=> ({
          rows: [],
        }),
    
        methods: {
          addRow() {
            this.rows.push({
              corporate_objective_id: '',
              kpa: '',
              kpi: '',
              weight: '',
              score: '',
              equal: '',
              file: {
                name: 'Choose File'
              }
            });
          },
          removeElement(index) {
              this.rows.splice(index, 1);
          },
          setFilename(event, row) {
            var file = event.target.files[0];
            row.file = file
          },
          save() {
            const postData = {
              data: this.rows
            }
            console.log(postData)
            axios
            .post('/api/employee-objective', {postData})
            .then(res => { console.log(res) })
            .catch(err => { console.log(err) });
          }
        }
      }
    </script>
    

    Controller.php

      public function store(Request $request) {
        foreach($request->data as $data) {
          $container = EmployeeObjective::updateOrCreate([
            'kpa_info' => $data['kpa'],
            'kpi_info' => $data['kpi'],
            'kpa_weight' => $data['weight'],
            'kpa_score_1' => $data['score'],
            'kpa_equal' => $data['equal'],
           ]);
          $container->save();
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2021-04-28
      • 2020-12-15
      • 2020-02-27
      • 1970-01-01
      • 2017-05-28
      • 2020-12-16
      • 2020-01-27
      • 2020-06-10
      • 2018-10-06
      相关资源
      最近更新 更多