【问题标题】:Why Vue Router doesn't run javascript transition hooks sync?为什么 Vue Router 不运行 javascript 转换挂钩同步?
【发布时间】:2017-07-11 03:09:35
【问题描述】:

我是 vue 路由器和 vue.js 的新手。我只是尝试在 vue-router 上使用 javascript 转换。为什么在路由更改之前不会触发 beforeLeave 事件?但它与 css 转换按预期工作。它适用于 css 过渡。但它不适用于 javascript 转换...这是 jsfiddle 示例...输入方法按预期工作。但是 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'
  }
})

【问题讨论】:

    标签: vue.js vuejs2 vue-router


    【解决方案1】:

    我已经解决了。不要使用多个转换进行链接。如果您使用 css 过渡,那没问题。但是,如果您使用 javascript 转换,它将无法按预期运行。因此,在“路由器视图”的父元素上使用转换。如果您想更改每条路线的转换,只需使用 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});
      }
    }
    
    })
    

    【讨论】:

      猜你喜欢
      • 2019-10-25
      • 1970-01-01
      • 2022-06-16
      • 2022-10-09
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多