zukucode
主にWEB関連の情報を技術メモとして発信しています。

Vue Router ページの表示時と離脱時のイベントをコンポーネントで設定する

Vue Rtouterでページの表示時と離脱時のイベントをコンポーネントで設定する方法を紹介します。

ページ表示時

ページ表示時のイベントはbeforeRouteEnterを使用します。

beforeRouteEnterはページの初期表示時に実行されます。

注意点として、beforeRouteEnterの処理ではthisが参照できないため、例えばdataに定義してた変数や、methodに定義した処理を参照できません。

以下のようにnextファンクションのパラメータにファンクションを指定するとthisに相当するパラメータが渡されるので、そこでコンポーネントの処理を行えます。

asyncawaitの記載は任意です。非同期処理を行う場合など、必要に応じて記載してください。)

export default {
  beforeRouteEnter(to, from, next) {
    this.initialize(); // thisは参照できないためエラー
    next(async (vm) => {
      await vm.initialize(); // vmはthisに相当します
      next();
    });
  },
  methods: {
    async initialize() {
      // 初期処理
    },
  },
};

ページ離脱時

ページ離脱時のイベントはbeforeRouteLeaveを使用します。

beforeRouteLeaveではthisでコンポーネント内のdatamethodなどの参照が可能です。

例えばページ離脱時に確認メッセージを表示して、キャンセルできるようにしたい場合は以下のようにします。

nextファンクションを呼ばずにreturnすることにより、ページ離脱のイベントがキャンセルされ、現在のページにとどまることができます。

export default {
  beforeRouteLeave(to, from, next) {
    if (this.confirm() === false) return;
    next();
  },
  methods: {
    confirm() {
      return window.confirm('ページを離脱してもよろしいですか?');
    },
  },
};

関連記事

  • vue-router webpackでページごとにファイルを分割する

    vue-routerでシングルアプリケーションを作成していると、ページ数が増えるにしたがって作成されるjsファイルのファイルサイズもどんどん増えていきます。ページごとにファイルを分割し、そのページがア...


  • vue-router 現在のパスによってスタイルを変更する

    vue-routerでシングルページアプリケーションを作成する際に、例えばヘッダやサイドバーのナビゲーションで現在表示しているページのリンクを無効にしたり色を変えたりしたい場合があります。現在表示して...


  • vue-routerを導入してSPAを作成する

    Vue.jsのプロジェクトにvue-routerを導入してシングルページアプリケーション(spa)を作成します。開発環境やフォルダ構成はwebpack モジュールのパスを絶対パスで指定する方法で扱った...


  • vue-router 各ページ表示時に処理を行う

    vue-routerで各ページに遷移したタイミングで初期化などのメソッドをコールしたい場合があります。以下のようにbeforeRouteEnterで各ページ起動時に処理を行うことができます。befor...


  • vue-router ページ遷移時にアニメーションスクロールをする

    vue-routerでページ遷移するときにスクロールの位置をトップ(一番上)に移動させたいとき、公式サンプルにしたがって以下のように実装します。JavaScript ページの先頭までアニメーションスク...


  • vueコンポーネントでvue-routerのページ制御を行う

    vueコンポーネントの処理でvue-routerのページ制御を行う方法を紹介します。vue-routerでページ遷移するときはrouter-linkのコンポーネントを使うことが多いですが、コンポーネン...


  • Electronとvue-routerを併用するときの注意点

    Electronとvue-routerを使うときに、ページ制御がうまく行かないときはrouterの設定を確認します。modeがhistoryになっているとなぜかうまく行かなかったのでhashに変更しま...


  • webpack lessをImportしてビルドする

    Vue.js lessを使いwebpackでビルドするでvueファイルの中でlessを実装してビルドする方法を紹介しました。htmlやbodyなどに適用するベースのクラスを外部のlessファイルに実装...


  • ExtractTextPluginでcssファイルを出力する

    webpackのプラグインExtractTextPluginを使って、ビルドされたjsファイルからstyleの部分を抽出してcssファイルで出力します。extract-text-webpack-plu...


  • webpack-dev-serverで開発サーバーを起動する

    webpack-dev-serverで開発サーバーを起動します。ファイルやフォルダ構成などの環境はvueファイル(単一ファイルコンポーネント)をwebpackでビルドで紹介したものと同様とします。we...