ルーティング切替情報に基づく遷移動効(2)
4247 ワード
千編一律のルーティング切替動効を回避する方法の1つは、ルーティング情報オブジェクト
まず、
たとえば、次のテンプレートは、Vueインスタンスの
次に、経路情報オブジェクト
たとえば、次のコードは、現在のアクティブパスに基づいて、Vueインスタンスの
サードパーティ製ライブラリの使用
サードパーティ製アクティブライブラリ、例えばAnimateを使用する場合.cssは、
たとえば、次のテンプレートの遷移効果コンポーネントの
$route
を傍受し、ルーティング切替情報に基づいて遷移効果を動的に選択することである.まず、
transition
コンポーネントのname
をVueインスタンスのモデルプロパティにバインドして、この名前を動的に変更します.name
によって、異なるダイナミックスタイルクラス名が対応し、異なる遷移ダイナミックが実現されることを知っています.たとえば、次のテンプレートは、Vueインスタンスの
name
属性に遷移効果コンポーネントのeffect
属性をバインドします.<transition :name="effect">
<router-view>router-view>
transition>
次に、経路情報オブジェクト
$route
の変更を傍受する.$route
は現在のアクティブなルーティングを反映しています.これはVueRouterがVueインスタンスに追加した応答属性です.したがって、Vueインスタンスを作成するときにwatch
の構成項目を使用してリスナーを宣言したり、$watch()
の方法で変更を監視したりすることができます.vm.$watch('$route',function(nv,ov){...})
$route
の新しい値(nv
-new value)は現在のルーティング情報オブジェクトを表し、古い値(ov
-old value)は前回のルーティング情報オブジェクトを表すので、パス切り替えの違いに応じてインスタンスのeffect
属性を変更することができる.たとえば、次のコードは、現在のアクティブパスに基づいて、Vueインスタンスの
effect
プロパティを設定します.vm.$watch('$route',function(to,from){
const effectMap = {
'/': 'home',
'/blogs':'blog',
'/about':'about'
}
this.effect = effectMap(to.path)
})
サードパーティ製ライブラリの使用
サードパーティ製アクティブライブラリ、例えばAnimateを使用する場合.cssは、
enter-active-class
シリーズのスタイルクラス属性を、Vueインスタンスの応答式属性にバインドしなければならない.たとえば、次のテンプレートの遷移効果コンポーネントの
enter-active-class
属性は、Vueインスタンスのeffect
属性にバインドされます.class="effect">
<router-view>router-view>
transition>
//.......................................................... ...................................................................
//html
//js
const EzHome = {template:'HOME
'}
const EzBlogs = {template:'BLOGS
'}
const EzAbout = {template:'ABOUT
'}
const router = new VueRouter({
routes:[
{path:'/',component:EzHome},
{path:'/blogs',component:EzBlogs},
{path:'/about',component:EzAbout}
]
})
new Vue({
el:'#app',
router,
data:{
effects: ['zoomIn','slideInDown','bounceIn','flipInX','rotateIn','rollIn','lightSpeedIn','fadeIn'],
effect :''
},
watch:{
'$route'(to,from){
const effectMap = {
"/":"fadeIn",
"/blogs":"rotateIn",
"/about":"zoomIn"
}
this.effect = ['animated', effectMap[to.path]].join(' ')
}
}
})