【Vue.js】ElementUIでテーブルを作るときにデータを加工したくなった

##はじめに

VueのUIライブラリ「**ElementUI**」でテーブルを作成するときに、
データを加工しようとしたら少しハマったので今回記事にさせて頂きました。

どうぞよろしくお願いします。

##開発環境

- MacOS
- vue 2.6.11
- vuecli 4.4.6
- element-ui 2.13.2
- vue-moment 4.1.0
- moment-timezone 0.5.31

##テーブルを作る

とりあえずこんな感じのテーブルを作ります。
コンポーネントについては、[公式ドキュメント](https://element.eleme.io/#/en-US/component/table)が参考になります。
![スクリーンショット 2020-07-25 0.00.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680201/eec941ed-6cd4-dc5e-7d2e-f325c2d24419.png)

```
<template>
	<div class="result-area">
		<el-table
			:data="tableData">
			<el-table-column
				prop="id"
				label="ID"
				width="100">
			</el-table-column>
			<el-table-column
				prop="name"
				label="ニックネーム"
				width="200">
			</el-table-column>
			<el-table-column
				prop="created_at"
				label="作成日"
				width="200">
			</el-table-column>
		</el-table>
	</div>
</template>
<script>
import CommonHelper from '../helper/CommonHelper';

export default {
	mixins: [CommonHelper],
	data() {
		return {
			tableData: [{
				id: 1,
				name: '山田太郎',
				created_at: '2020-07-01 10:00:00'
			}, {
				id: 2,
				name: '鈴木一郎',
				created_at: '2020-07-02 11:00:00'
			}, {
				id: 3,
				name: '菅田将暉',
				created_at: '2020-07-03 12:00:00'
			}]
		};
	}
}
</script>
```

##データを加工して表示

このテーブルの作成日を日本語に直して表示したい。
![スクリーンショット 2020-07-25 0.20.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680201/10d2a878-8381-e40d-e197-211d2454a147.png)

```
<template>
	<div class="result-area">
		<el-table
			:data="tableData">
			<el-table-column
				prop="id"
				label="ID"
				width="100">
			</el-table-column>
			<el-table-column
				prop="name"
				label="ニックネーム"
				width="200">
			</el-table-column>
			<el-table-column
				prop="created_at"
				label="作成日"
				width="200">
				<template slot-scope="scope">
					{{date_format(scope.row.created_at)}}
				</template>
			</el-table-column>
		</el-table>
	</div>
</template>
```

scopeを定義してあげて、date_formatという関数を使用して変換しています。
「**scope.row.created_at**」の「**row**」を忘れていて、少しハマってしまいました。
一応関数も書いておきます。

```
export default {
	methods: {
		date_format(date) {
			let format_date = this.$moment(date);
			format_date.locale('ja');
			return format_date.format('LL');
		}
	}
}
```

##おまけ

この書き方を利用して、こんな感じのもできます。
![スクリーンショット 2020-07-25 0.36.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680201/c2894662-043a-de45-7c5d-d2b1b79642bf.png)

```
<template>
	<div class="result-area">
		<el-table
			:data="tableData">
			<el-table-column
				prop="id"
				label="ID"
				width="100">
			</el-table-column>
			<el-table-column
				prop="name"
				label="ニックネーム"
				width="200">
			</el-table-column>
			<el-table-column
				prop="id">
				<template slot-scope="scope">
					<el-button
						size="mini"
						@click="pushDetail(scope.row.id)">
						<i class="el-icon-edit-outline"></i>
					</el-button>
				</template>
			</el-table-column>
		</el-table>
	</div>
</template>
<script>
import CommonHelper from '../helper/CommonHelper';

export default {
	mixins: [CommonHelper],
	data() {
		return {
			tableData: [{
				id: 1,
				name: '山田太郎',
				created_at: '2020-07-01 10:00:00'
			}, {
				id: 2,
				name: '鈴木一郎',
				created_at: '2020-07-02 11:00:00'
			}, {
				id: 3,
				name: '菅田将暉',
				created_at: '2020-07-03 12:00:00'
			}]
		};
	},
	methods: {
		pushDetail(id) {
			console.log(id);
		}
	}
}
</script>
```

アイコンを押すと、methodsにidを渡すことができます。

##おわりに

ElementUIはコンポーネントも豊富で使いやすいのですが、
日本語の記事が少なめなので、もっと記事が増やしていきたいと思います。

よろしければ、フォローお願いします。