vue-router
API
基本的な使い方
<!-- ここにマッチしたコンポーネントが描写される -->
<router-view></router-view>
<!-- リンクを張りたいときは -->
<router-link to="/foo">Go to Foo</router-link>
<router-link to="/bar">Go to Bar</router-link>
const Foo = { template: '<div>foo</div>' };
const Bar = { template: '<div>bar</div>' };
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar },
];
const router = new VueRouter({
routes,
});
var app = new Vue({
el: '#app',
router,
});
router-link
には、ルートによってrouter-link-exact-active
やrouter-link-active
といったクラスが自動的に設定される。
コンポーネント側から vue-router を操作するには次のオブジェクトを使う。
this.$route
path
fullPath
params
query
hash
matched
- 詳細はドキュメント参照
this.$router
(===router
)go
push
back
forward
- 詳細はドキュメント参照
Dynamic Route Matching
次のようにすることで、ダイナミックルーティングを設定できる。
:username
や:post_id
の部分は、this.$route.params
としてコンポーネントに渡される。
const routes = [{ path: '/user/:username/post/:post_id', component: User }];
// /user/evan/post/123?page=2
//
// params => { username: 'evan', post_id: 123 }
// query => { page: 2 }
params の変更を検知する
params が変更されただけでは、コンポーネントは再作成されない(再利用される)。 つまりライフサイクルメソッドは発動しない。 これを検知したいときは次のようにする。
const User = {
watch: {
$route(to, from) {},
},
// もしくはナビゲーションガードを使う
beforeRouteUpdate(to, from, next) {},
};
様々なルート定義
vue-router はpath-to-regexpを使用しており、多様なルート定義ができる。詳細はドキュメントを参照。