前回の記事はこちら↓
固定されたレイアウトを作る
viewに名前を付けて、固定レイアウトを作ることができる。
<router-view name="header"></router-view>
どのパスでアクセスされても同じレイアウトを出すためには、パスのcomponentを
・複数形にする
・オブジェクトにする
ことで、固定レイアウトを表示させることができる。
routes: [{ path: '/home', components: {
default:Home,
header:Header
} },
propsを名前付きviewごとに付ける必要がある。
{ path: '/users/:id', components:{
default:Users,
header:Header
}, props: {
default:true,
header:false
},
リダイレクトをする
特定のパスにアクセスされた時、リダイレクトをする方法
{
path: '/redirect',
redirect: '/home'
}
オブジェクトで書くことも可能。
{
path: '/redirect',
redirect:{
path:'/home'
}
}
アスタリスク(*)を用いることで、全てのパスに適用する事ができる。
{
path: '*',
redirect:{
path:'/home'
}
}
トランジションをつける
router-viewには、アニメーションをつけることができる。
<transition name="fade"> <router-view></router-view> </transition>
<style scoped>
.fade-enter,
.fade-leave-to {
opacity: 0;
}
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.5s;
}
</style>
scrollBehavior関数~ページ内スクロール~
WEBサイトでよくある、idの場所までスクロール遷移をする挙動を実装したい。
Vueでは、routerがブラウザの挙動を止めて動的コンポーネントを切り替えているので、スクロール等のブラウザのデフォルト挙動が再現できない。
ページ内スクロールをしたい時は、JSで命令を書き込む必要があるが、VueにはscrollBehavior関数が用意されている。
scrollBehavior(){}
scrollBehaviorは、パスにアクセスした直後に起動するため、トランジションを適用している時としていない時とで、実行命令を変えなければいけない。
下記では、トランジションをかけていない想定でコード例を挙げます。
selectorを用いて、スクロールしたいid名を指定する。
scrollBehavior() {
return {
selector:"#content"
};
}
id要素にピッタリしてしまうため、offsetを用いてスクロール位置を調整することができる。
scrollBehavior() {
return {
selector:"#content",
offset: { x: 50, y: 60 }
};
}
また、 scrollBehavior() には引数を3つ取ることができる。
scrollBehavior(to,from,savedPosition)
to,from…$routeでアクセスできるもの
savedPosition …前のページに戻る時、前回のページのポジションを記憶している。
scrollBehavior(to,from,savedPosition) {
// 前のページに戻る時に前回のポジションを再現する。
if(savedPosition){
return savedPosition;
}
// $routeページ内にハッシュ(#)があったらスクロールを行う。
if(to.hash){
return {
selector: to.hash,
offset: { x: 50, y: 60 }
};
}
}


