首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Vue Router不运行javascript转换钩子同步?

为什么Vue Router不运行javascript转换钩子同步?
EN

Stack Overflow用户
提问于 2017-02-21 21:10:50
回答 1查看 829关注 0票数 1

我是vue路由器和vue.js的新手。我只是尝试在vue-router上使用javascript转换。为什么在路由更改之前beforeLeave事件不会触发?但它在css转换中的工作效果与预期一致。它可以很好地处理css转换。但它不适用于javascript转换...下面是jsfiddle example...enter方法的工作原理。但是beforeLeave方法并不像预期的那样工作,并且路由之间没有过渡链。请帮帮我..

jsfiddle

代码语言:javascript
复制
<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

代码语言:javascript
复制
    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'
  }
})
EN

回答 1

Stack Overflow用户

发布于 2017-02-22 01:08:43

我已经解决了。不要使用多个过渡进行链接。如果你使用css转换,这是没有问题的。但是如果你使用javascript transition,它将不会像预期的那样运行。因此在父元素"router-view“上使用转换。如果您想要更改每个路由的转换,只需检查带有if块的route.name,并为特定的路由进行转换。

这是jsfiddle

代码语言:javascript
复制
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});
  }
}

})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42368268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档