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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

1324閲覧

ブラウザリロード後に滞在ページから初期ページへ遷移する問題を解決したいです

supermaruetsu

総合スコア148

Vue.js

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/09/14 07:52

表題のようブラウザをリロードすると、例え自身が3ページ目、4ぺージ目とどのページに滞在していようと最初の1ページに戻ってしまう現象が起きています。
原因は何となく分かっており、リロード時にJavascript(Vuejs)を再度初期状態から読み込み、そのアクセス先が1ページ目だからであると考えています。コードを下記に記載致します。

javascript

1 2<template> 3.... 4</template> 5 6<script> 7import { get } from './api' 8import VuePagination from './Pagination.vue' 9 10export default { 11 components: { 12 VuePagination 13 }, 14 data() { 15 return { 16 Data : [], 17 URL: `/api/user/favorite/characters`, 18 counter: 0, 19 pagination: { 20 total: 0, 21 per_page: 32, 22 from: 1, 23 to: 0, 24 current_page: 1 25 }, 26 offset: 32, 27 } 28 }, 29 created: function() { 30 get(this.URL + `?page=` + this.pagination.current_page) 31 .then((res) => { 32 if(res.data) { 33 this.Data = res.data.data; 34 this.pagination = res.data; 35 } 36 }) 37 .catch((err) => { 38 alert(err.status); 39 })

疑問点がいくつかあります。
まず一つ目は、Laravelにデフォルトで備わっているbladeを使ってHTMLを作り出した場合、この現象が発生しない点です。私はこの経験があったので、bladeを使わずVuejsでPaginationを行う際も、「Laravelから何らかのparameter(例えばpre_looked_page_urlのような)が送られてくるはず」と考えていました。しかしそのような値は見つけることができませんでした。

二点目はずばり、これを解決する方法です。
いいアイデアや、実装は簡単だけれども危険な方法などいくつかアプローチの方法をご提示いただければと思います。

個人的な事で大変恐縮なのですが、前任者が逃亡し手探りでプロジェクトを進めている状態であり、皆様のお力をお借りできれば幸いです。

よろしくお願い致します。

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

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

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

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

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

fagai

2017/09/14 08:05

あまりjsに精通していないのですが、URLを動的に変更するメソッドなどがあるのでそれで変更をするとかどうでしょうか? vue-router等を使っていれば専用のメソッドを使えば上手くできた気がします
supermaruetsu

2017/09/17 02:27

コメントありがとうございました。ご提案頂いたvue-routerを使った方法で無事実装できました!ありがとうございます。
guest

回答2

0

ベストアンサー

Vueで何も考えずにページネーションしたらなら大体そうなります。

■現在LaravelからのhtmlとVueが混在してるなら対応は面倒なので
Vueに詳しくないなら捨ててしまってLaravelのやり方だけにすればいいと思います。

■一番現実的なのはページネーション部分をLaravelで出力。Vueコンポーネントのpropsにpage追加。
Laravelから現在のページを渡す。

<vue-component page="{{ $posts->currentPage()" }}></vue-component>

Vueでは指定されたページだけ取得。ページの切り替えはVueでやらない。

get(this.URL + `?page=` + this.page)

■ページが変わった時にブラウザのURLも変わってるならそれを見てcurrent_pageの初期値を設定すれば解決するかもしれない。

■完全にVueメインでのSPAにするならルーティングもVueでやることで解決できる。

投稿2017/09/14 08:39

kawax

総合スコア10377

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

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

supermaruetsu

2017/09/17 02:36

ご回答ありがとうございました。複数の具体的なアプローチをご提示頂いた事は大変勉強になり、また無事解決に至りました。方法としては4つ目の、vue(vue-router含む)に任せる方法です。今回は1番メンテのしやすそうな方法を選びました。
guest

0

リロードするとWebサーバーからのデータとSPAの遷移が食い違ってしまうのは、多分この辺を見ると解決するかと思います。
HTML5 History モード
Vue2とCakePHP3を共存させる

あとVuePaginationというライブラリの中身はわかりませんが、フロントエンドでのルーティングには以下を使うと解決するかもしれません。
vue-router 2

Laravel+Vue2のわかりやすいチュートリアルです。
Laravel 5.4 と Vue.js 2.2 と JWTAuth で、ログインできる SPA アプリケーションのチュートリアル 1/4

投稿2017/09/14 08:19

編集2017/09/14 08:24
aro10

総合スコア4106

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

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

supermaruetsu

2017/09/17 02:41

いつもご回答ありがとうございます。根本が理解できていなかった為、頂いた資料大変勉強になりました。あまり駆け足にならず、時には立ち止まって理解を深める事も重要ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問