山の検索
vue3を使用して、検索機能の実装のサンプルコードです。
by komame
HTML
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>登山検索</title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<!-- axiosのライブラリ -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<!-- cssライブラリ -->
<link rel="stylesheet" href="https://newcss.net/new.min.css">
</head>
<body>
<div id="app">
<table>
<tr>
<th>地域</th>
<td>
<label v-for="(area, index) in area" :key="area" style="margin-right: 15px;">
<input v-model="selectedArea" name="keyword" type="checkbox" :value="area.label">
{{area.label}}
</label>
</td>
</tr>
<tr>
<th>都道府県</th>
<td>
<select v-model="selectedPrefecture" style="width: 100%;">
<option value="" selected>都道府県で絞りこむ</option>
<template v-for="(prefecture, index) in prefecture" :key="prefecture">
<optgroup :label="prefecture.area">
<template v-for="(name, index) in prefecture.name" :key="name">
<option :value="name">{{name}}</option>
</template>
</optgroup>
</template>
</select>
</td>
</tr>
<tr>
<th valign="middle">キーワード</th>
<td>
<input name="keyword_search" maxlength="80" type="text" v-model="searchKeywords">
</td>
</tr>
</table>
<div class="" style="margin-bottom: 50px;"><a @click="resetSearch()">検索内容をリセットする</a></div>
<div>ヒットした数:{{filterItems.length}}</div>
<ul class="checkedArea">
<li v-for="(item, index) in filterItems" :key="item.id">
<h4>名前:{{item.name}} ({{item.kana}})</h4>
<div>エリア:{{item.area}}</div>
...
JavaScript
const search = Vue.createApp({
// dataは初期値。動的なものを入れられない
data() {
return {
// fiddle上では、jsonデータをここに入れています。
records: [{
"id": 1,
"name": "利尻山",
"kana": "りしりざん",
"area": [
"北海道"
],
"prefecture": [
"北海道"
]
},
{
"id": 2,
"name": "蔵王山",
"kana": "ざおうさん",
"area": [
"東北"
],
"prefecture": [
"福島県", "山形県"
]
},
{
"id": 3,
"name": "那須岳",
"kana": "なすだけ",
"area": [
"東北", "関東"
],
"prefecture": [
"福島県", "栃木県"
]
},
{
"id": 4,
"name": "平ヶ岳",
"kana": "ひらがだけ",
"area": [
"関東"
],
"prefecture": [
"新潟県",
"群馬県"
]
},
{
"id": 5,
"name": "雲取山",
"kana": "くもとりやま",
"area": [
"関東"
],
"prefecture": [
"東京都",
"埼玉県"
]
},
{
"id": 6,
"name": "白馬岳",
"kana": "しろうまだけ",
"area": [
"中部"
],
"prefecture": [
"富山県",
"長野県"
]
},
{
"id": 7,
"name": "剱岳",
"kana": "つるぎだけ",
"area": [
"中部"
],
"prefecture": [
"富山県"
]
},
{
"id": 8,
"name": "槍ヶ岳",
"kana": "やりがたけ",
"area": [
"中部"
],
"prefecture": [
"長野県",
"岐阜県"
]
},
{
"id": 9,
"name": "大台ヶ原",
"kana": "おおだいがはら",
"area": [
"近畿"
],
"prefecture": [
"奈良県",
...