Skip to content
Router companion for Nativescript-Vue's Manual Routing.
JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Udpated circleci config Oct 23, 2018
dist
src
test Added test Oct 23, 2018
.gitignore Committing is not a crime Oct 19, 2018
README.md Update README.md Nov 22, 2018
index.js Committing is not a crime Oct 19, 2018
package.json 0.1.0-alpha.3 Oct 24, 2018
webpack.config.js Removed unused import Oct 23, 2018
yarn.lock Bump handlebars from 4.0.12 to 4.1.2 Jul 12, 2019

README.md

ns-vue-nami CircleCI Buy Me A Coffee donate button

Router companion for Nativescript-Vue 2.0's Manual Routing.

Yep, that's her, Nami from One Piece. Why? Coz she's a navigator.

Installation

npm

npm install ns-vue-nami

yarn

yarn add ns-vue-nami

Recommended Implementation

Create a router folder with an index.js file within your app folder.

app
|- components
|- router
   |- index.js

index.js

import Vue from 'nativescript-vue';
import NsVueNami from 'ns-vue-nami';
import login from '~/components/login';
import dashboard from '~/components/dashboard';
import isAuthenticated from 'some-authentication-module';

Vue.use(NsVueNami);

const vm = new Vue();

vm.$nami.authGuard((next) => {
  if(isAuthenticated) {
    next();
  } else {
    next('login');
  }
});

// register all routes here.
vm.$nami.init({
  routes: [
    {
      name: 'login',
      component: login,
      noAuth: true,
      entry: !isAuthenticated
    },
    {
      name: 'dashboard',
      component: dashboard,
      entry: isAuthenticated
    }
  ]
});

main.js

Just invoke the router in your main.js.

import '@babel/polyfill';
import entry from './router';

new Vue({
  store,
  render: h => h('frame', [h(entry)])
}).$start();

Please note the import of the babel/polyfill above, this might be necessary to avoid this bug: NativeScript encountered a fatal error: ReferenceError: Can't find variable: regeneratorRuntime you can install the polyfill by running npm install --save-dev @babel/polyfill and importing it as seen above.

Sample Usage

From the template

<button @tap="$nami.navigate('foo')">Go to foo</button>

From script

export default {
  methods: {
    someFunc() {
      this.$nami.navigate('bar');
    }
  }
}

API

.init()

Sets all the routable components across the whole app. Returns the entry component to be used in main.js as frame entry.

Router properties:

  1. name: String - The component name of your choice.
  2. component: Vue component - The vue component.
  3. noAuth: Boolean: default - false - The component will NOT require authentication if set to true.
  4. entry: Boolean - Set a particular component as entry point.
import login from '~/components/login';
import dashboard from '~/components/dashboard';

vm.$nami.init({
  routes: [
    {
      name: 'login',
      component: login,
      entry: true
    },
    {
      name: 'dashboard',
      component: dashboard
    }
  ]
})

.authGuard()

Will decide whether the component is routable or not based on authentication status.

import Vue from 'nativescript-vue';
import NsVueNami from '../plugins/ns-vue-nami';

import login from '~/components/login';
import dashboard from '~/components/dashboard';

// Dummy authentication status.
const isAuthenticated = true;

Vue.use(NsVueNami);

const vm = new Vue();

vm.$nami.authGuard((next) => {
  if(isAuthenticated) {
    next();
  } else {
    next('login');
  }
});

export default vm.$nami.init({
  routes: [
    {
      name: 'login',
      component: login,
      noAuth: true,
      entry: !isAuthenticated // login will be the entry if isAuthenticated is false
    },
    {
      name: 'dashboard',
      component: dashboard,
      entry: isAuthenticated // dashboard will be the entry if isAuthenticated is true
    }
  ]
});

.register()

Adds a new route to the list of routes on the fly.

import cat from '~/components/cat';

vm.$nami.register({name: 'cat', component: cat});

.navigate()

// Basic
this.$nami.navigate('cat-component');

// With props
this.$nami.navigate('cat-component', {name: 'Kidlat', color: 'Black'});
<button @tap="$nami.navigate('cat-component', {name: 'Kidlat', color: 'Black'})">View Cat</button>

.modal()

Just like .navigate() but shows the component on a modal.

// Basic
this.$nami.modal('cat-component');

// With props
this.$nami.modal('cat-component', {name: 'Kidlat', color: 'Black'});
<button @tap="$nami.modal('cat-component', {name: 'Kidlat', color: 'Black'})">View Cat in a Modal</button>

.back()

Goes back to the previous component.

this.$nami.back();
<button @tap="$nami.back()">Go back</button>
You can’t perform that action at this time.