
今回のアプリのモックアップにはlocalstrageを使います。localstorageはwebブラウザのローカル領域にデータを保存する仕組みです。
現段階でできているのは
①商品名などの入力
②表への登録
③localstorageによるデータの保存
④商品名での検索
です。
まだできていないのは
①画像の表示、登録
②画像の保存
③全体のデザイン
です。
【コード】
〈HTML〉
<!DOCTYPE html>
<html><head>
<style>
table,
td,
th {
border: solid 1px black;
border-collapse: collapse;
}th {
background-color: beige;
}</style>
</head>
登録する表のデザイン(仮)
<body>
<div id="app">
<!-- 登録する -->
<div id="resist">
<button @click="clearData()">localStorageクリア</button>
<button @click="viewData()">dataプロパティのコンソール表示 </button>
保存したデータの消去をするlocalStorageクリアボタン
保存したデータのコンソールへの表示をするdataプロパティのコンソール表示ボタン
を作る
<h1>登録しよう</h1>
<h2>登録情報</h2>
<div id="inner"><label>商品画像: </label><br>
<label>商品名: <input type="text" v-model="tagName"></label><br>
<label for="category">商品カテゴリー:</label>
<select id="category" v-model="category">
<option selected>その他</option>
<option>お惣菜🍙</option>
<option>パン🍞</option>
<option>生鮮食品🍅</option>
<option>お菓子🍭</option>
<option>日配食品🐄</option>
</select><br>
<label>価格:
<input type="text" v-model="price">
</label><br><label for="discount">割引率:</label>
<select id="discount" v-model="discount">
<option selected>定価</option>
<option>10%OFF</option>
<option>20%OFF</option>
<option>30%OFF</option>
<option>50%OFF</option>
<option>セール価格</option>
</select><br>
<label>廃棄期限:
<input type="date" v-model="deadline">
</label>
<br>
<label>詳細: <textarea name="overView" cols="30" lows="20" v-model="overView"></textarea></label>
</div>
</div>
商品画像、商品名、商品カテゴリ、価格、割引率、廃棄期限、詳細のテキストボックス、プルダウンメニューを作る
<!-- 登録ボタン -->
<div class="btn" @click="registBtn()">
<button>登録!</button>
</div>
<br>
登録ボタンを作る
registBtn()でクリックイベントを設定している
<!-- 表示する -->
<h2>登録リスト</h2>
<table class="hyouji">
<tr>
<th>商品画像</th>
<th>商品名</th>
<th>商品カテゴリー</th>
<th>価格</th>
<th>割引率</th>
<th>廃棄期限</th>
<th>詳細</th>
</tr>
<tr v-for="d in data">
<td>
</td>
<td>
{{d.tagName}}
</td>
<td>
{{d.category}}
</td>
<td>
{{d.price}}
</td>
<td>
{{d.discount}}
</td>
<td>
{{d.deadline}}
</td>
<td>
{{d.overView}}
</td>
</tr>
</table>
表を作る
<tr v-for="d in data">でdataからデータを取り出して、{{ }}の場所にそれぞれ表示させる
<!-- 検索する -->
<h1>検索しよう</h1>
<div class="search">
<label>検索タグ:<input type="text" v-model="searchedTag"></label>
</div>
<table style="margin-top: 1em" class="result">
<tr>
<th>商品画像</th>
<th>商品名</th>
<th>商品カテゴリー</th>
<th>価格</th>
<th>割引率</th>
<th>廃棄期限</th>
<th>詳細</th>
</tr>
検索するときの表
検索タグ:のテキストボックスに入力された文字列をsearchedTagとする
<tr v-for="d in data" v-if="d.tagName == searchedTag" :key="d.id">
<td></td>
<td>
{{d.tagName}}
</td>
<td>
{{d.category}}
</td>
<td>
{{d.price}}
</td>
<td>
{{d.discount}}
</td>
<td>
{{d.deadline}}
</td>
<td>
{{d.overView}}
</td>
</tr>
</table>
</div>
<tr v-for="d in data" v-if="d.tagName == searchedTag" :key="d.id">で
商品名(d.tagName)と検索タグ(searchedTag)に入力された名前が同じであれば、表に表示する
〈javascript〉
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
let app = new Vue({
el: '#app',
data: {
tagName: '',
category: '',
price: '',
discount: '',
deadline: '',
overView: '',
searchedTag: '',
data: [],
photo: '',},
dataの初期設定をする
mounted: function() {
let savedata = JSON.parse(localStorage.getItem('save'));
if (savedata != null) {
this.data = JSON.parse(localStorage.getItem('save'));
}
},
サイトを開いたときにローカルストレージに記録していたデータをthis.dataに読み出す
methods: {
registBtn: function() {
this.data.push({tagName: this.tagName,
category: this.category,
price: this.price,
discount: this.discount,
deadline: this.deadline,
overView: this.overView
});
localStorage.setItem('save', JSON.stringify(this.data));
this.tagName = '';
this.category = '';
this.price = '';
this.discount = '';
this.deadline = '';
this.overView = '';
},
registBtndnで登録ボタンを押したときの動作を設定する
this.data.push({ })で入力フォームに記入された情報をthis.dataに追加
localStorage.setItem('save', JSON.stringify(this.data));でsaveというキー名のローカルストレージにthis.dataを保存
this.tagName = '';で入力フォームを空白にする
clearData: function() {
localStorage.removeItem('save');
},
viewData: function() {
console.log('this.data:');
console.log(this.data);
}
}});
</script>
</body>
クリアボタン、コンソール表示ボタンの動作を設定













