【问题标题】:How do I import a excel file using Maatwebsite in a vue component?如何在 vue 组件中使用 Maatwebsite 导入 excel 文件?
【发布时间】:2020-01-29 14:09:06
【问题描述】:

我已经这样做了,但当时我使用 laravel Blade 和 laravel 集体来保存表单。现在我正在使用 vue,这对我来说有点不同,而且对我来说太棘手了,因为我是 vuejs 的新手。我怎样才能做到这一点?我可以在 vue 组件中使用 laravel 集体,这样我的工作就会变得轻松吗?感谢您的回答。这是我的代码。

Vue 组件

<div class="modal fade" id="exampleModal2" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
            <div class="modal-dialog" role="document">
              <div class="modal-content">
                <div class="modal-header">
                  <h4 class="modal-title" id="exampleModalLabel">Import CSV</h4>
                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                  </button>
                </div>
                  <form @submit.prevent="importRoom()">
                <div class="modal-body">
                    <div class="form-group">
                      <label>Select CSV</label>
                      <input
                        v-on:change ="i dont have a method yet"
                        type="file"
                        name="template"
                        id="template"
                        class="form-control"
                        :class="{ 'is-invalid': form.errors.has('template') }"
                      />
                      <has-error :form="form" field="bldg"></has-error>
                    </div>
                </div>
                <div class="modal-footer">
                  <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                  <button type="submit" class="btn btn-primary">Save changes</button>
                </div>
                </form>
              </div>
            </div>
          </div>

我的路线

Route::post('/importRoom','RoomController@import');

控制器

 public function import(Request $request){
        if($request->hasFile('template')){
            $path = $request->file('template')->getRealPath();
            $data = \Excel::load($path)->get();

            if($data->count() > 0){
                $rows = $data->toArray();
                foreach ($rows as $row) {
                    $inserts[]=[
                        'room_desc' => $row['room_desc'],
                        'bldg' => $row['bldg'],
                    ];
                }
            }
            $chuncked = array_chunk($inserts, 10);
            if(empty($inserts)){
                dd('Request data does not have any files to import.');  
            }
            else {
                foreach($chuncked as $inserts){
                    \DB::table('rooms')->insert($inserts);
                 }
                dd('record inserted');  
            }
        }
    }

方法

  importRoom(){
            axios.post('/importRoom')
              .then(()=>{
                console.log('imported')
              })
          }

我的 excel 中只有两列要导入数据库。我对客户端真的很陌生,所以对我来说很难。感谢您的帮助..

【问题讨论】:

  • 你必须使用 axios 通过 API 调用来实现。
  • 是的,我需要调用方法importRoom() 对吗?但是在onchanged(e) 那里我应该怎么做?我的代码在 vue 中是否正确?

标签: javascript php laravel vue.js


【解决方案1】:

onchange 你必须在 formData 中上传 excel 表

getExcelData(e) {
    const formData = new FormData();
    const file = e.target.files[0];
    formData.append('file', file);
    axios.post('url', formData)
            .then(response => {
                //Code to play with api response with excel data
            })
            .catch(error => {
                //Catch errors
            });
}

【讨论】:

  • 我应该也调用方法importRoom()先生吗?
  • 不需要你应该在@change调用getExcelData
  • 表格呢?我提交后?
  • 您必须将该响应数据存储在一些变量中,然后在提交时以表单形式传递它
  • 那位先生是什么意思?对不起,我有点困惑
猜你喜欢
  • 2019-05-20
  • 1970-01-01
  • 2019-05-12
  • 2018-07-03
  • 2019-05-02
  • 2020-01-18
  • 2017-12-20
  • 2017-05-18
  • 2017-06-19
相关资源
最近更新 更多