The library is a navigation manager, it is similar to native mobile app.
require vue
2.x
and vue-router2.x
.
This Plugin just manage the page instance of navigation stack, it will not change the history of browser. So browser history is just as like as vue-router
npm install --save vue-nav
main.js
import Vue from 'vue'
import router from './router' // vue-router instance
import Navigation from 'vue-nav'
// use plugin
Vue.use(Navigation, {router})
App.vue
<template>
<navigation>
<router-view></router-view>
</navigation>
</template>
<script>
import ...
export default {
stackType: 'single'
...
}
</script>
main.js
import Vue from 'vue'
import router from './router' // vue-router instance
import store from './store' // vuex store instance
import Navigation from 'vue-nav'
// install plugin
Vue.use(Navigation, {router, store})
App.vue
You can use stack.direction to control transition. stack.direction is mapped from vuex state
<template>
<transition :name="'router-' + stack.direction">
<navigation>
<router-view></router-view>
</navigation>
</transition>
</template>
<script>
export default {
....
computed: {
...mapState([
'stack'
])
}
....
}
</script>
<style>
.router-backward-enter-active,
.router-forward-enter-active,
.router-backward-leave-active,
.router-forward-leave-active {
will-change: transform;
transition: all 500ms ease-out;
height: 100%;
width: 100%;
position: absolute;
backface-visibility: hidden;
}
.router-backward-enter {
opacity: 1;
transform: translate3d(-50%, 0, 0);
}
.router-backward-leave-active {
opacity: 0.5;
z-index: 100;
transform: translate3d(100%, 0, 0);
}
.router-forward-enter {
opacity: 1;
transform: translate3d(100%, 0, 0);
}
.router-forward-leave-active {
opacity: 0.5;
transform: translate3d(-50%, 0, 0);
}
</style>
Thank vue-navigation, it open my mind to make this