| All your own components must have unique name | 
| All routes name must have unique name | 
| Your app need a main Frame in the render | 
npm install nativescript-vue-router-ns --save
or
yarn add nativescript-vue-router-ns
// app/router/index.js
import Vue from 'nativescript-vue'
import NSVueRouter from 'nativescript-vue-router-ns'
import Dashboard from './components/Dashboard'
import Login from './components/Login'
Vue.use(NSVueRouter)
const routes = [
  {
    name: 'dashboard.index',
    component: Dashboard,
    meta: { auth: true }
  },
  {
    name: 'login.index',
    component: Login,
    meta: { guest: true }
  }
]
const router = new NSVueRouter({
  ignoreSame, // <-- Optional. Will set if reject or accept navigate to same current component.
  routes,
  /* eslint-disable-next-line no-undef  */
  verbose: TNS_ENV !== 'production' // <-- Optional. Will output the warnings to console.
})
export default router// app/app.js or app/main.js
import Vue from 'nativescript-vue'
import Main from './Main'
import router from './router'
new Vue({
  router
  // ...
  render: h => h('frame', [h(Main)]) // <-- Main Frame in render app
}).$start()<!-- Your own Vue Components -->
<template>
  <Page actionBarHidden="true">
    <FlexboxLayout flexDirection="column" justifyContent="center">
      <button text="Navigate direct" @tap="$router.push('dashboard.index')" />
      <button text="Navigate with method" @tap="submit" />
    </FlexboxLayout>
  </Page>
</template>
<script>
  export default {
    name: 'LoginIndex',
    methods: {
      submit() {
        // ...
        this.$router.pushClear('dashboard.index')
        // ...
      }
    }
  }
</script>// app/router/index.js
// ...
router.beforeEach((to, next) => {
  if (to.meta.auth && isLogged) {
    /* eslint-disable-next-line no-undef */
    if (TNS_ENV !== 'production') {
      /* eslint-disable-next-line no-console */
      console.error(new Error('To Login!.'))
    }
    router.pushClear('login.index')
  } else if (to.meta.guest && isLogged) {
    router.push('dashboard.index')
  } else {
    next()
  }
})
// ...| Parameters | Type | Default | Description | 
|---|---|---|---|
| ignoreSame | Boolean | true | Set if reject or accept navigate to same current component. | 
| routes | Array | [] | Array of objects with app's routes. | 
| verbose | Boolean | false | Show output the warnings to console. | 
This package provides 3 methods for navigation, $router.push, $router.pushClear and $router.back
| Parameters | Type | Description | 
|---|---|---|
| name | String | First parameter in pushandpushClearmethods. | 
| options | Object | Is an optional object, which accepts all options supported by Manual Routing | 
| times | [String, Number] | Optional parameter in backmethod that go back any times that you set. | 
NOTE: When $router.pushClear method is used the navigator stack is cleaned.
- Native navigation
- Before actions
- After actions
- Nested routes
Thank you for considering contributing to the NSVueRouter! Please leave your PR or issue.