超暫定版の予約確認画面を作る。
入力画面から値を取得するには?
そもそもコンポーネント間でデータをやり取りするには、どうすればいいんだろうか?
以下ページに説明があると思うのだが、読んでも分からない・・・
※ ルートコンポーネントにプロパティを渡す | Vue Router
props を使えばいいと思うのだが、うまくいかないので、
とりあえず以下の方法で対応する。
☆ 呼び出し側 (例:予約入力画面の登録ボタン)
以下ページに説明があると思うのだが、読んでも分からない・・・
※ ルートコンポーネントにプロパティを渡す | Vue Router
props を使えばいいと思うのだが、うまくいかないので、
とりあえず以下の方法で対応する。
☆ 呼び出し側 (例:予約入力画面の登録ボタン)
ボタンクリック時のイベントで this.$router.push として、
nameに呼び出し先の画面名、paramsに渡すパラメータを指定。
例) $route.params.book.name で予約入力画面で入力した氏名を取得
nameに呼び出し先の画面名、paramsに渡すパラメータを指定。
methods: {
submit: function() {
this.$router.push({
name: 'book.confirm',
params: {
book: this.book,
}
});
},
},
☆ 呼び出し先 (例:予約確認画面)$route.params で呼び出し側で指定したパラメータが取得できる。例) $route.params.book.name で予約入力画面で入力した氏名を取得
予約確認画面コンポーネント
ということで暫定版の予約確認画面
☆ resources/js/components/ConfirmComponent.vue
☆ resources/js/components/ConfirmComponent.vue
<template>
<div class="container">
<h1>ご予約の確認</h1>
<form class="form-horizontal">
<div class="row mb-3">
<label for="resdate" class="col-sm-2 col-form-label">予約日</label>
<div class="col-sm-8">
<input type="text" id="resdate" name="resdate" class="form-control" readonly v-model="$route.params.book.resdate">
</div>
</div>
<div class="row mb-3">
<label for="restime" class="col-sm-2 col-form-label">予約時間</label>
<div class="col-sm-8">
<input type="text" id="restime" name="restime" class="form-control" readonly v-model="$route.params.book.restime">
</div>
</div>
<div class="row mb-3">
<label for="slot" class="col-sm-2 col-form-label">コース</label>
<div class="col-sm-8">
<input type="number" id="slot" name="slot" class="form-control" readonly v-model="$route.params.book.slot">
</div>
</div>
<div class="row mb-3">
<label for="num" class="col-sm-2 col-form-label">人数</label>
<div class="col-sm-8">
<input type="number" id="num" name="num" class="form-control" readonly v-model="$route.params.book.num">
</div>
</div>
<div class="row mb-3">
<label for="name" class="col-sm-2 col-form-label">お名前</label>
<div class="col-sm-8">
<input type="text" id="name" name="name" class="form-control" readonly v-model="$route.params.book.name">
</div>
</div>
<div class="row mb-3">
<label for="email" class="col-sm-2 col-form-label">メールアドレス</label>
<div class="col-sm-8">
<input type="text" id="email" email="email" class="form-control" readonly v-model="$route.params.book.email">
</div>
</div>
<div class="row mb-3">
<label for="tel" class="col-sm-2 col-form-label">電話番号</label>
<div class="col-sm-8">
<input type="text" id="tel" tel="tel" class="form-control" readonly v-model="$route.params.book.tel">
</div>
</div>
<div class="row mb-3">
<button type="button" class="btn btn-success">登録</button>
<span> </span>
<router-link v-bind:to="{name: 'book.new'}">
<button type="button" class="btn btn-success">前画面に戻る</button>
</router-link>
</div>
</form>
</div>
</template>
ルータの登録
☆ resources/js/app.js
:
import ConfirmComponent from './components/ConfirmComponent';
:
const router = new VueRouter({
routes: [
:
{
path: '/confirm',
name: 'book.confirm',
component: ConfirmComponent,
},
],
:
予約入力画面の変更
予約入力画面の登録ボタンで予約確認画面へ遷移するように修正。
☆ resources/js/components/NewBookComponent.vue
☆ resources/js/components/NewBookComponent.vue
:
<button type="button" v-on:click="submit" class="btn btn-success">登録確認へ</button>
:
<script>
export default {
:
methods: {
submit: function() {
this.$router.push({
name: 'book.confirm',
params: {
book: this.book,
}
});
},
},
};
</script>
動作確認
予約システム

0 件のコメント:
コメントを投稿