Skip to content

Instantly share code, notes, and snippets.

@BruceL33t
Forked from jdanyow/app.html
Last active March 16, 2017 10:31
Show Gist options
  • Save BruceL33t/95469a9cb3a762d79da31e0b64248036 to your computer and use it in GitHub Desktop.
Save BruceL33t/95469a9cb3a762d79da31e0b64248036 to your computer and use it in GitHub Desktop.
<template>
<!--<ul>
<li><a href="#shared-parent/child-a">#shared-parent/child-a</a></li>
<li><a href="#shared-parent/child-b">#shared-parent/child-b</a></li>
<li><a href="#shared-parent2/child-a">#shared-parent2/child-a</a></li>
<li><a href="#shared-parent2/child-b">#shared-parent2/child-b</a></li>
</ul>-->
<style>
.active a { color: red; font-weight: bold; }
</style>
<ul>
<li repeat.for="row of router.navigation" class="${row.isActive ? 'active' : ''}">
<a if.bind="row.settings.childRoute" href.bind="row.href + '/' + row.settings.childRoute">${row.title}</a>
<a if.bind="!row.settings.childRoute" href.bind="row.href">${row.title}</a>
</li>
</ul>
<router-view></router-view>
</template>
export class App {
message = 'Hello World!';
configureRouter(config, router){
config.title = 'Aurelia';
config.map([
{ route: 'shared-parent', moduleId: './shared-parent', settings: { childRoute: 'child-a' }, nav: true, title: 'Shared Parent - child-a' },
{ route: 'shared-parent', moduleId: './shared-parent', settings: { childRoute: 'child-b' }, nav: true, title: 'Shared Parent - child-b' },
{ route: ['', 'shared-parent2'], moduleId: './shared-parent2', nav: true, title: 'Shared Parent 2' },
]);
this.router = router;
}
}
<template>
<div class="child">
<h2>Child A</h2>
Language: ${state.language}, Dates: ${state.fromdate || '???'} - ${state.todate || '???'}
</div>
</template>
import {inject} from 'aurelia-framework';
import {SharedState} from './shared-state';
@inject(SharedState)
export class ChildA {
constructor(state) {
this.state = state;
}
}
<template>
<div class="child">
<h2>Child B</h2>
Language: ${state.language}, Dates: ${state.fromdate || '???'} - ${state.todate || '???'}
</div>
</template>
import {inject} from 'aurelia-framework';
import {SharedState} from './shared-state';
@inject(SharedState)
export class ChildB {
constructor(state) {
this.state = state;
}
}
<!doctype html>
<html>
<head>
<title>Aurelia</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.shared-parent,
.shared-parent > form {
border: 5px solid green;
padding: 10px;
}
.shared-parent > form {
width: 50%;
}
.child {
border: 5px solid blue;
margin-top: 10px;
padding: 10px;
}
</style>
</head>
<body aurelia-app>
<h1>Loading...</h1>
<script src="https://jdanyow.github.io/rjs-bundle/node_modules/requirejs/require.js"></script>
<script src="https://jdanyow.github.io/rjs-bundle/config.js"></script>
<script src="https://jdanyow.github.io/rjs-bundle/bundles/aurelia.js"></script>
<script src="https://jdanyow.github.io/rjs-bundle/bundles/babel.js"></script>
<script>
require(['aurelia-bootstrapper']);
</script>
</body>
</html>
<template>
<div class="shared-parent">
<h1>Shared Parent</h1>
<form>
<label>Language: <input type="text" value.bind="state.language"></label>
<label>From Date: <input type="date" value.bind="state.fromdate"></label>
<label>To Date: <input type="date" value.bind="state.todate"></label>
</form>
<router-view></router-view>
</div>
</template>
import {inject, NewInstance} from 'aurelia-framework';
import {SharedState} from './shared-state';
@inject(NewInstance.of(SharedState)) // <-- this says create a new instance of the SharedState whenever a SharedParent instance is created
export class SharedParent {
constructor(state) {
this.state = state;
}
configureRouter(config, router){
config.title = 'Aurelia';
config.map([
{ route: ['', 'child-a'], moduleId: './child-a', nav: true, title: 'Child A' },
{ route: 'child-b', moduleId: './child-b', nav: true, title: 'Child B' },
]);
this.router = router;
}
}
<template>
<div class="shared-parent">
<h1>Shared Parent 2</h1>
<form>
<label>Language: <input type="text" value.bind="state.language"></label>
<label>From Date: <input type="date" value.bind="state.fromdate"></label>
<label>To Date: <input type="date" value.bind="state.todate"></label>
</form>
<router-view></router-view>
</div>
</template>
import {inject, NewInstance} from 'aurelia-framework';
import {SharedState} from './shared-state';
@inject(NewInstance.of(SharedState)) // <-- this says create a new instance of the SharedState whenever a SharedParent2 instance is created
export class SharedParent2 {
constructor(state) {
this.state = state;
}
configureRouter(config, router){
config.title = 'Aurelia';
config.map([
{ route: ['', 'child-a'], moduleId: './child-a', nav: true, title: 'Child A' },
{ route: 'child-b', moduleId: './child-b', nav: true, title: 'Child B' },
]);
this.router = router;
}
}
export class SharedState {
fromdate = '';
todate = '';
language = 'English';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment