質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Q&A

3回答

2470閲覧

【Vue.js】選んだセレクトボックスによって切り替わるコンテンツをブラウザバックしても保持したい

luna87

総合スコア0

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

0グッド

0クリップ

投稿2021/09/11 12:09

編集2021/09/11 17:14

##■前提
Vue.jsで選んだセレクトボックスの値によってコンテンツを切り替えるという実装をしています。
Aを選択するとAの内容を表示、Bを選択したらBの内容を表示するといった具合です。
初期値は「値を選択してください」にしています。
上記はすでに実装済みなのですが、以下2つの問題が解決出来ずにいます。

##■現状
リロードすると初期値「値を選択してください」に戻ってしまう
コンテンツ(A,B)内にあるボタンを押下し次のページに遷移した後ブラウザバックすると、選択していたセレクトボックスの値はそのままですがコンテンツは非表示になってしまっている状態。
例)セレクトボックスでAを選択し、表示されたコンテンツ内のボタンを押して別ページへ。その後ブラウザバックするとセレクトボックスはAになっているがコンテンツは非表示。
しかも再度Aを選択してもコンテンツは表示されない。。(リロード後解決します)

##■実現したいこと
①リロードしても選択したセレクトボックスの値とコンテンツを表示させたい。
②ブラウザバックしても選択したセレクトボックスの値とコンテンツを表示させたい。

▼以下の参考ブログに書かれていることが正に実現したい事なのですが、セレクトボックスの場合どう書けばいいのか分からず困っている状態です。。、
参考ブログ

====================
JavascriptもVue.jsもほぼ初心者なのですが仕事で必要になったため調べながら実装しています。ですが基礎が殆ど無いため検索しても余計に分からなくなってしまい質問させていただきました。こういった方法がスマートだ、などのヒントでも構いませんのでアドバイス等いただけないでしょうか。どうぞよろしくお願いいたしますm(_ _)m

HTML

1<div id="test"> 2 <!-- セレクトボックス --> 3 <select v-model="selectedItem"> 4 <option 5 v-for="item in selectItems" 6 :value="item.id" 7 :key="item.id" 8 > 9 {{ item.label }} 10 </option> 11 </select> 12 13 <!-- Aの内容 --> 14 <div v-if="isA" id="a"> 15 <h2>Aの内容です</h2> 16 <a href="https://www.google.com/?hl=ja">別ページへの遷移ボタン</a> 17 </div> 18 <!-- Bの内容 --> 19 <div v-if="isB" id="b"> 20 <h2>Bの内容です</h2> 21 <a href="https://www.google.com/?hl=ja">別ページへの遷移ボタン</a> 22 </div> 23</div>

Vue.js

1const test = new Vue({ 2 el: "#test", 3 data() { 4 return { 5 selectItems: [ 6 { id: 1, label: "値を選択してください" }, 7 { id: 2, label: "A" }, 8 { id: 3, label: "B" }, 9 ], 10 selectedItem: 1, 11 }; 12 }, 13 // 今何が選ばれているかを判定する算出プロパティ 14 computed: { 15 isA() { 16 return this.selectedItem === 2; 17 }, 18 isB() { 19 return this.selectedItem === 3; 20 }, 21 } 22 })

補足情報(バージョン)

2.6.14

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Webプログラミングでは各ページの動作は独立しているので、値の受け渡しはGet渡しかPost渡しを行います。その受け取り方も形式があり、Vue.js独自のやり方もあります。
このWebページから選択IDを送り出すやり方と行き先のWebページで受け取るやり方を実装しなければなりません。そして、戻ってきたときも、選択IDの指定があるかないかを確かめて、指定があればそれを反映する処理を用意します。つまり、遷移先のJavaScriptも示していただく必要があります。
Get,Post,Form,location等のキーワードを学習し、値の受け渡しをマスターしましょう。
たとえば
【jQuery入門】ページ遷移やPOSTで値渡しを行う方法まとめ!
JavaScriptで選択項目を選択した状態に設定する方法を現役エンジニアが解説【初心者向け】
の記事などを参考に試行錯誤してみましょう。

投稿2021/09/11 21:53

編集2021/09/11 22:15
seastar3

総合スコア2287

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

select句にv-on:change="メソッド1()"属性を加え、このメソッド1()をmethods引数に用意します。
また表示フラグisA,iaBはデータ引数内に用意します。それを操ると次のようなコードになります。

html

1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> 4<head> 5<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 6<meta http-equiv="Content-Style-Type" content="text/css" /> 7<meta http-equiv="Content-Script-Type" content="text/javascript" /> 8<script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script> 9<title>Vue.js selectの取得</title> 10</head> 11<body> 12 13<div id="test"> 14 <!-- セレクトボックス --> 15 <select v-model="selectedItem" v-on:change="getSelectedId()"> 16 <option 17 v-for="item in selectItems" 18 :value="item.id" 19 :key="item.id" 20 > 21 {{ item.label }} 22 </option> 23 </select> 24 25 <!-- Aの内容 --> 26 <div v-if="isA" id="a"> 27 <h2>Aの内容です</h2> 28 <a href="https://www.google.com/?hl=ja">別ページへの遷移ボタン</a> 29 </div> 30 <!-- Bの内容 --> 31 <div v-if="isB" id="b"> 32 <h2>Bの内容です</h2> 33 <a href="https://www.google.com/?hl=ja">別ページへの遷移ボタン</a> 34 </div> 35</div> 36 37<script> 38 39var test = new Vue({ 40 el: "#test", 41 data: { 42 selectItems:[ 43 { id: 1, label: "値を選択してください" }, 44 { id: 2, label: "A" }, 45 { id: 3, label: "B" } 46 ], 47 selectedItem: '', 48 isA: false, 49 isB: false 50 }, 51 // 今何が選ばれているかを判定する算出プロパティ 52 methods: { 53 getSelectedId: function() { 54 if (this.selectedItem === 1) { 55 this.isA = false; 56 this.isB = false; 57 } else if (this.selectedItem === 2) { 58 this.isA = true; 59 this.isB = false; 60 } else if (this.selectedItem === 3) { 61 this.isA = false; 62 this.isB = true; 63 } 64 } 65 } 66}); 67</script> 68</body> 69</html>

投稿2021/09/11 15:16

seastar3

総合スコア2287

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

luna87

2021/09/11 16:06

ご丁寧にコードを記述してくださりどうもありがとうございます。こちらのコードで試してみたのですが実現したかった①②が上手くいきませんでした。。 以下のような状態でした。 ====================================================== ①Aを選択、Aのコンテンツ表示状態でリロードした場合 ▶︎初期化されてしまう(リロードしても初期化されないのが理想) ②Aを選択、Aのコンテンツ表示状態で「別ページへの遷移ボタン」押下し、遷移先からブラウザバックした場合 ▶︎セレクトボックスはAが選択されているが、Aのコンテンツは表示されていない状態。 セレクトボックスのAを選択してみると無反応でAのコンテンツが表示されない。けれど一度Bを選択しBのコンテンツを表示させた後Aを選択し直すと、Aのコンテンツも表示されるようになる。 (ブラウザバックしてもセレクトボックスはAが選択されていてAのコンテンツも表示されている状態が理想) ====================================================== 私が最初に載せたコードと全く同じ動きとなってしまいました。。m(__)m seastar3様の環境では上記の理想の動きになっていらっしゃいますか? よろしくお願いいたします。
guest

0

1はlocalstorageを使ってみてください

https://qiita.com/higa08/items/e12c3a16db014a9414c1

2の現象がイメージできないですが、localstorageにselectedItemを保存して
mountedで呼び出すのはどうでしょうか

投稿2021/09/11 13:51

omame23

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

luna87

2021/09/11 14:13

ご回答ありがとうございます。localstorageという方法があるのですね。検討もつかなかったので助かります。こちら試してみます! どうもありがとうございますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問