Framework7 Router Guard

by Maiki Nahara

HTML

<script src="https://unpkg.com/[email protected]/js/framework7.bundle.min.js"></script>
<link rel="stylesheet" href="https://unpkg.com/[email protected]/css/framework7.bundle.min.css">
<div id="app">
  <div class="panel panel-left panel-cover theme-dark">
    <div class="page"></div>
  </div>
  <div class="panel panel-right panel-reveal theme-dark">
    <div class="page"></div>
  </div>
  <div class="view view-main ios-edges">
    <div class="page" data-name="home">
      <div class="navbar">
        <div class="navbar-inner">
          <div class="left">
            <a href="#" class="link panel-open" data-panel="left">Left Panel</a>
          </div>
          <div class="title sliding">My App</div>
          <div class="right">
            <a href="#" class="link panel-open" data-panel="right">Right Panel</a>
          </div>
        </div>
      </div>
      <!-- Toolbar-->
      <div class="toolbar toolbar-bottom">
        <div class="toolbar-inner">
          <a href="#" class="link">Left Link</a>
          <a href="#" class="link">Right Link</a>
        </div>
      </div>
      <div class="page">
        <div class="navbar">
          <div class="navbar-inner sliding">
            <div class="left">
              <a href="#" class="link back">
                <i class="icon icon-back"></i>
                <span class="if-not-md">Back</span>
              </a>
            </div>
            <div class="title">Swipeable Tabs</div>
          </div>
        </div>
        <div class="toolbar tabbar toolbar-bottom">
          <div class="toolbar-inner">
            <a href="#tab-1" class="tab-link tab-link-active">Tab 1</a>
            <a href="#tab-2" class="tab-link">Tab 2</a>
            <a href="#tab-3" class="tab-link">Tab 3</a>
          </div>
        </div>
        <div class='page-content'>
          <div class='list'>
            <ul>
              <li>
                <a href="/auth-page/" class="item-link item-content"> auth page
                </a>
...

JavaScript

var app = new Framework7({
  root: '#app',
  theme: 'auto',
  routes: [{
    path: '/auth-page/',
    params: {
    	requireAuth: true
    },
    component: {
      template: `
        <div class="page">
          <div class="navbar">
            <div class="navbar-inner">
              <div class="title">{{title}}</div>
            </div>
          </div>
          <div class="page-content">
          	<div class="page-content">
          		<h1>auth page</h1>
          	</div>
          </div>
        </div>
      `,
      data: function() {
        return {
          title: 'Component Page',
          names: ['John', 'Vladimir', 'Timo'],
        }
      },
      methods: {
        openAlert: function() {
          var self = this;
          self.$app.dialog.alert('Hello world!');
        },
      },
      on: {
        pageInit: function(e, page) {
          // do something on page init
        },
        pageAfterOut: function(e, page) {
          // page has left the view
        },
      }
    },
  },{
    path: '/no-auth-page/',
    params: {
    	requireAuth: true
    },
    component: {
      template: `
        <div class="page">
          <div class="navbar">
            <div class="navbar-inner">
              <div class="title">{{title}}</div>
            </div>
          </div>
          <div class="page-content">
          	<h1> no auth page</h1>
          </div>
        </div>
      `
    },
  }]
});

/*
routeChange	
(newRoute, previousRoute, router)
Event will be fired on current route change
*/
var viewMain = app.views.create('.view-main');
app.view.main.router.on('routeChange', function (newRoute, previousRoute, router) {
debugger
})