A simple and lightweight LitElement Router.
npm install lit-element-router --save
You can find a working project on StackBlitz https://stackblitz.com/edit/lit-element-router
import { LitElement, html } from 'lit-element';
import { routerMixin } from 'lit-element-router';
class MyApp extends routerMixin(LitElement) {
static get routes() {
return [{
name: 'home',
pattern: '',
data: { title: 'Home' }
}, {
name: 'info',
pattern: 'info'
}, {
name: 'user',
pattern: 'user/:id'
}, {
name: 'not-found',
pattern: '*'
}];
}
onRoute(route, params, query, data) {
console.log(route, params, query, data)
}
}
customElements.define('my-app', MyApp);
Don't want to use mixins interface you cane use a simple version in this tutorial: https://github.com/hamedasemi/lit-element-router/blob/mainline/README_NOT_MIXIN.md
import { LitElement, html } from 'lit-element';
import { routerMixin } from 'lit-element-router';
class MyApp extends routerMixin(LitElement) {
}
customElements.define('my-app', MyApp);
import { LitElement, html } from 'lit-element';
import { routerMixin } from 'lit-element-router';
class MyApp extends routerMixin(LitElement) {
static get routes() {
return [{
name: 'home',
pattern: ''
}, {
name: 'info',
pattern: 'info'
}, {
name: 'user',
pattern: 'user/:id'
}, {
name: 'not-found',
pattern: '*'
}];
}
onRoute(route, params, query, data) {
this.route = route;
this.params = params;
}
}
customElements.define('my-app', MyApp);
import { LitElement, html } from 'lit-element';
import { routerOutletMixin } from 'lit-element-router';
export class AnyArbitaryLitElement extends routerOutletMixin(LitElement) {
}
customElements.define('any-arbitary-lit-element', AnyArbitaryLitElement);
import { LitElement, html } from 'lit-element';
import { routerMixin } from 'lit-element-router';
class MyApp extends routerMixin(LitElement) {
static get routes() {
return [{
name: 'home',
pattern: ''
}, {
name: 'info',
pattern: 'info'
}, {
name: 'user',
pattern: 'user/:id'
}, {
name: 'not-found',
pattern: '*'
}];
}
onRoute(route, params, query, data) {
this.route = route;
this.params = params;
}
render() {
return html`
<any-arbitary-lit-element current-route='${this.route}'>
<div route='home'>Home any-arbitary-lit-element</div>
<div route='info'>mY Info any-arbitary-lit-element</div>
<div route='user'>User ${this.params.id} any-arbitary-lit-element</div>
<div route='not-authorized'>Not Authorized any-arbitary-lit-element</div>
<div route='not-found'>Not Found any-arbitary-lit-element</div>
</any-arbitary-lit-element>
`;
}
customElements.define('my-app', MyApp);
import { LitElement, html } from 'lit-element';
import { routerLinkMixin } from 'lit-element-router';
export class AnArbitaryLitElement extends routerLinkMixin(LitElement) {
}
customElements.define('an-arbitary-lit-element', AnArbitaryLitElement);
import { LitElement, html } from 'lit-element';
import { routerLinkMixin } from 'lit-element-router';
export class AnArbitaryLitElement extends routerLinkMixin(LitElement) {
constructor() {
super()
this.href = ''
}
static get properties() {
return {
href: { type: String }
}
}
render() {
return html`
<a href='${this.href}' @click='${this.linkClick}'><slot></slot></a>
`
}
linkClick(event) {
event.preventDefault();
this.navigate(this.href);
}
}
customElements.define('an-arbitary-lit-element', AnArbitaryLitElement);
![]() IE / Edge |
![]() Firefox |
![]() Chrome |
![]() Safari |
![]() iOS Safari |
![]() Samsung |
![]() Opera |
---|---|---|---|---|---|---|
IE11, Edge | last 2 versions | last 2 versions | last 2 versions | last 2 versions | last 2 versions | last 2 versions |