我是vue路由器和vue.js的新手。我只是尝试在vue-router上使用javascript转换。为什么在路由更改之前beforeLeave事件不会触发?但它在css转换中的工作效果与预期一致。它可以很好地处理css转换。但它不适用于javascript转换...下面是jsfiddle example...enter方法的工作原理。但是beforeLeave方法并不像预期的那样工作,并且路由之间没有过渡链。请帮帮我..
jsfiddle
<script src="https://npmcdn.com/vue/dist/vue.js"></script>
<script src="https://npmcdn.com/vue-router/dist/vue-router.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.19.1/TweenMax.min.js"></script>
<div id="app">
<router-link to="/">/home</router-link>
<router-link to="/foo">/foo</router-link>
<router-view></router-view>
</div>这是js
const Home = { template: '<transition v-on:enter="enter" v-on:leave="leave" ><div>Home</div></transition>',
methods:{
enter:function(el, done){
TweenMax.from(el,2,{x:-60,onComplete:done});
},
leave:function(el, done){
TweenMax.to(el,2,{x:60,onComplete:done});
}
}
}
const Foo = { template: '<transition v-on:enter="enter" v-on:leave="leave" ><div>Foo</div></transition>',
methods:{
enter:function(el, done){
TweenMax.from(el,2,{x:-60,onComplete:done});
},
leave:function(el, done){
TweenMax.to(el,2,{x:60,onComplete:done});
}
}
}
const router = new VueRouter({
mode: 'history',
routes: [
{ path: '/', component: Home },
{ path: '/foo', component: Foo }
]
})
new Vue({
router,
el: '#app',
data: {
msg: 'Hello World'
}
})发布于 2017-02-22 01:08:43
我已经解决了。不要使用多个过渡进行链接。如果你使用css转换,这是没有问题的。但是如果你使用javascript transition,它将不会像预期的那样运行。因此在父元素"router-view“上使用转换。如果您想要更改每个路由的转换,只需检查带有if块的route.name,并为特定的路由进行转换。
这是jsfiddle
const Home = { template: '<div>Home</div>',
methods:{
enter:function(el, done){
TweenMax.from(el,2,{x:-60,onComplete:done});
},
leave:function(el, done){
TweenMax.to(el,2,{x:60,onComplete:done});
}
}
}
const Foo = { template: '<div>Foo</div>',
methods:{
enter:function(el, done){
TweenMax.from(el,2,{x:-60,onComplete:done});
},
leave:function(el, done){
TweenMax.to(el,2,{x:60,onComplete:done});
}
}
}
const router = new VueRouter({
mode: 'history',
routes: [
{ path: '/', component: Home },
{ path: '/foo', component: Foo }
]
})
new Vue({
router,
el: '#app',
data: {
msg: 'Hello World'
},
methods:{
enter:function(el, done){
TweenMax.from(el,2,{x:-60,onComplete:done});
},
leave:function(el, done){
TweenMax.to(el,2,{x:60,onComplete:done});
}
}
})https://stackoverflow.com/questions/42368268
复制相似问题