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

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

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

現在表示しているページ(パス)を取得して、対象のパスなら対象のリンクにスタイルまたはクラスを設定します。

以下のようにvue-routerで用意されたrouter-linkを使用する場合は、該当のパスの場合はrouter-link-activeというクラスが付与されます。

exactの属性をつけるとURLが/fooの場合のみ有効と判定され、/foo/barといった下の階層の場合はrouter-link-activeは付与されなくなります。

<router-link tag="div" to="/foo" exact>
  <a>リンク</a>
</router-link>

router-linkを使用しない場合

router-linkを使用せずに普通のhtmlタグで同じように対象のURLの場合はrouter-link-activeのクラスを付与したい場合は以下のようにします。

<div :class="{'router-link-active': $route.path === '/foo'}">
  <a>リンク</a>
</div>

上記の例は===の完全一致で判定しているので、exactの属性をつけたパターンになります。

exactをつけないパターンにしたい場合や独自にアクティブか判定したい場合は以下のようにcomputedの処理で独自のファンクションを実装して判定します。

<template>
  <div :class="{'router-link-active': isActive}">
    <a>リンク</a>
  </div>
</template>

<script>
export default {
  computed: {
    isActive () {
      // 独自の判定処理
    }
  }
};
</script>

関連記事

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

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


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

    vue-routerでページ遷移するときにスクロールの位置をトップ(一番上)に移動させたいとき、公式サンプルにしたがって以下のように実装します。routerの値をwatchして、変更されたタイミングで...


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

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


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

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


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

    Vue.jsのプロジェクトにvue-routerを導入してシングルページアプリケーション(spa)を作成します。最初にvue-routerのパッケージをインストールします。router-linkはナビ...


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

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


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

    htmlやbodyなどに適用するベースのクラスを外部のlessファイルに実装して、スタイルをサイト全体に適用したい場合があります。外部のlessファイルをモジュールとしてImportしてwebpack...


  • Vuex actionの処理でaxiosでajaxを行う

    Vuexのactionでaxiosのライブラリを使ったajaxの処理を行います。処理の流れとして、http(axios)でajaxアクセスを行い、成功時はmutationをコールして、storeに取得...


  • Vuex 厳格(strict)モードでエラーになるよくある原因

    Vuexの厳格(strict)モードでエラーになってしまう原因でよくあるパターンです。stateに格納した配列をソートして表示するときに、stateの値をcomputedやgettersでそのままソー...


  • Vuexとaxiosを連携する

    ajaxの処理が増えるたびに同じmutationを実行するように処理を入れるのは大変なので、axiosの処理でmutationを実行するようにします。axiosにはinterceptorsという機能が...