LoginSignup
2
3

More than 3 years have passed since last update.

vue-routerの戻るボタンを押してback()した時は処理を変えたい

Posted at

目的

<keep-alive /> やvuexを使った場合、ブラウザのメモリ上にデータが残る
これらの機能を使った一覧画面の場合、

  • 過去データをそのまま表示するか?
  • サーバーに再検索するか?

の判断が必要になるケースが稀にある。

例えば、戻るボタン、backで画面遷移したい場合は過去の検索結果のデータを表示し、
メニュー等、他からの画面遷移なら再検索させたい場合がこれにあたる

vuer-router経由で読み込むPage Componetに対して、
共通でextendsするcomponentとして下記を定義する

export default {
  name: 'base-page',
  beforeRouteLeave(to, from, next) {
    if (this.backing) to.params.isBack = true
    this.backing = false
    next()
  },
  data() {
    return {
      backing: false,
    }
  },
  computed: {
    isBack() {
      return this.$route && this.$route.params.isBack
    },
  },
  methods: {
    backPage() {
      this.backing = true
      this.$router.back()
    },
  },
}

一覧ページなどの戻るボタンで戻るページでは下記のように処理分岐する

<script>
import BasePage from '../base-page.js'

export default {
  extends: BasePage,
  beforeRouteEnter: function () {
    if (this.isBack) {
      // 戻るボタン経由の場合
    } else {
      // それ以外の場合
    }
  },
}
</script>

戻るボタンでは、backPageメソッドを呼び出す。
もしくは、ブラウザのback eventを監視し、backPageメソッドと同様の処理を行わせる

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3