バックエンド側から取得しておいたデータをフロントの管理画面で表示していて、そのデータをcsvにして吐き出す機能を実装したいときがあります。
こんなときはわざわざバックエンドにまたリクエストかけるのではなく、vue.js上で受け取ったjsonデータをいじってcsvにしたほうが効率的です。
vue.jsやNuxt.jsでcsvダウンロード機能を実装する方法
とりあえずライブラリに頼ります。
https://www.npmjs.com/package/vue-json-to-csv
npm
npm i vue-json-to-csv
yarn
yarn add vue-json-to-csv
vue.js
<template>
<VueJsonToCsv :json-data="csvData" :csv-title="csvファイルのタイトル" :labels="labels">
<v-btn @click="download">
csvダウンロード
</v-btn>
</VueJsonToCsv>
</template>
<script>
import Vue from 'vue';
import VueJsonToCsv from "vue-json-to-csv";
export default {
components: {
VueJsonToCsv,
},
data() {
return {
csvData: [],
//labelsはcsvの各データのラベルを決められます。
labels: {
id: { title: "ID" },
url: { title: "URL" },
name: { title: "購入者" },
purchaseDate: { title: "申込購入日" },
},
}
},
methods: {
download() {
// date型とか変換したいときはこのタイミングで変換
this.jsonData.forEach((data) => {
this.csvData.push({
id: data.id,
url: data.url,
purchaseDate: data.purchaseDate,
});
});
}
}
}
たったこれだけです。
こんな感じでaxiosとかで取得したデータを整えてcsvダウンロード可能です。