Using Vue-Router
TIP
I've been working on a new zooming library.
Give Zumly a try and joing our community at https://zumly.org
You can use zircle-ui with Vue-Router in any environment (from sandbox to vue-cli).
TIP
Breaking change:
Up to zircle-ui v.1.2.2 the routes were handled automatically based on your views. However, the functionality of the router was pretty limited (see issue #19). From zircle-ui v.1.2.3 most of the caveats were eliminated. However, you need to define the routes in your Vue router.
const router = new Router({
routes: [
{ path: '/', redirect: '/home' },
{ path: '/home', name: 'home', component: home },
{ path: '/docs/:id', name: 'docs', component: docs },
{ path: '*', redirect: '/not-found' },
{ path: '/not-found', name: 'not-found', component: missing }
]
})
Use:
You don't have to setup the initial view (
this.$zircle.setView('you-initial-view')
), because the views are handled by the router.There is no need to add the components in
$options.components
, but you need to use named routeNow the router will render the view that is in the route. Tough the previous views will not be rendered. To avoid loose of context you can add a conditional z-spot button with a fallback view(eg:
home
)In case you use
dynamic routes
you should add anin-component guard
as is described in the Vue-router documentationSee this example with the new implementation of the vue-router on zircle-ui.
Current limitations:
- Go forward using browser navigation buttons
- Using routes with queries
Setup for Browser or code sandboxes.
Installing Vue-Router
Add vue-router using a <script>
tag
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
Setup zircle-ui and vue-router
- Add z-canvas component in your html.
- Create some view components.
- Config Vue router.
- Create a Vue Instance.
<!DOCTYPE html>
<html>
<head>
<!-- Vue.js -->
<script type="text/javascript" src="https://unpkg.com/vue"></script>
<!-- Vue-router -->
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<!-- Zircle from CDN-->
<script type="text/javascript" src="https://unpkg.com/zircle"></script>
<link href="https://unpkg.com/zircle/dist/zircle.css" rel="stylesheet">
</head>
<body>
<div id="app">
<z-canvas :views="$options.components"></z-canvas>
</div>
<script>
// Your view compoments
const foo = {
template: `<z-view>Foo View
<z-spot
slot="extension"
:angle="45"
to-view="bar">
Bar
</z-spot>
</z-view>`
}
const bar = {
template: `<z-view>Bar View</z-view>`
}
const router = new VueRouter({
routes: [
{ path: '/', redirect: '/foo' },
{ path: '/foo', name: 'foo', component: foo },
{ path: '/bar', name: 'bar', component: bar }
]
})
new Vue({
el: '#app',
router,
mounted() {
this.$zircle.config({
router
})
}
})
</script>
</body>
</html>
Check this demo in Codepen
For older versions in Codepen
See:
For NPM or vue-cli
Install vue-router in your project
npm install vue-router
TIP
In case using vue-cli simply accept to Install vue-rRouter in the project generator. Of course, you can install the router later.
In your main.js
file
import Vue from "vue"
import App from "./App"
import zircle from "zircle"
import "zircle/dist/zircle.css"
Vue.use(zircle)
new Vue({
render: h => h(App)
}).$mount('#app')
Setup zircle-ui and vue-router
Steps:
- Add z-canvas component in the
<template>
tag. - Create some view components.
- Config vue-router.
- Create a Vue Instance.
In your App.vue
<template>
<z-canvas :views="$options.components"></z-canvas>
</template>
<script>
import Vue from 'vue'
import Router from 'vue-router'
import foo from '/components/foo'
import bar from '/components/bar'
Vue.use(Router)
const router = new Router({
routes: [
{ path: '/', redirect: '/foo' },
{ path: '/foo', name: 'foo', component: foo },
{ path: '/bar', name: 'bar', component: bar }
]
})
export default {
router,
mounted () {
this.$zircle.config({
router
})
}
}
</script>
Create foo and bar views on the src/components/ folder:
<template>
<z-view>Foo View
<z-spot
slot="extension"
:angle="45"
to-view="bar">
Bar
</z-spot>
</z-view>
</template>
<template>
<z-view>Bar View
</z-view>
</template>