Skip to content

Instantly share code, notes, and snippets.

@lstarky
Last active March 18, 2018 15:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save lstarky/28447bcb4b0c67cff472aae397fd66c0 to your computer and use it in GitHub Desktop.
Save lstarky/28447bcb4b0c67cff472aae397fd66c0 to your computer and use it in GitHub Desktop.
Aurelia modify sidebar from router view (with eventAggregator)
<template>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container-fluid">
<ul class="nav navbar-nav">
<li><a href="#/home">Home</a></li>
<li><a href="#/square">Square</a></li>
<li><a href="#/circle">Circle</a></li>
</ul>
</div>
</nav>
<br><br><br><br><br><br><br>
<div class="container">
<h1>Hello, ${fname}</h1>
<div class="well" if.bind="sidebarExtra">
<compose view.bind="sidebarExtra"></compose>
</div>
<hr>
<router-view></router-view>
</div>
</template>
import {inject} from 'aurelia-framework';
import {EventAggregator} from 'aurelia-event-aggregator';
@inject(EventAggregator)
export class App {
sidebarExtra = '';
constructor(eventAggregator) {
this.ea = eventAggregator;
this.fname = "Liam";
}
attached() {
this.sub = this.ea.subscribe('my-router', response => {
if (typeof response.fname !== 'undefined') {
this.fname = response.fname;
}
if (typeof response.sidebarExtra !== 'undefined') {
this.sidebarExtra = response.sidebarExtra;
}
});
}
detached() {
this.sub.dispose();
}
configureRouter(config, router) {
this.router = router;
config.title = 'Menu';
config.map([
{ route: ['', 'home'], name: 'home', moduleId: 'home' },
{ route: 'square', name: 'square', moduleId: 'square'},
{ route: 'circle', name: 'circle', moduleId: 'circle'}
]);
}
}
<template>
<h4>Circle details...</h4>
<ul>
<li>Circle 1</li>
<li>Circle 2</li>
<li>Circle 3</li>
</ul>
</template>
<template>
<h4>Circle Router View</h4>
<button class="btn btn-success" click.delegate="onClick()">Set text from Circle</button>
</template>
import {inject} from 'aurelia-framework';
import {EventAggregator} from 'aurelia-event-aggregator';
@inject(EventAggregator)
export class Circle {
constructor(eventAggregator) {
this.ea = eventAggregator;
}
activate() {
this.ea.publish('my-router', {sidebarExtra: 'circle-sidebar.html'})
}
onClick() {
this.ea.publish('my-router', {fname: 'Circle'})
}
}
<template>
<h4>Home Router View!</h4>
<button class="btn btn-info" click.delegate="onClick()">Set text from Home</button>
</template>
import {inject} from 'aurelia-framework';
import {EventAggregator} from 'aurelia-event-aggregator';
@inject(EventAggregator)
export class Home {
constructor(eventAggregator) {
this.ea = eventAggregator;
}
activate() {
this.ea.publish('my-router', {sidebarExtra: null})
}
onClick() {
this.ea.publish('my-router', {fname: 'Home'})
}
}
<!doctype html>
<html>
<head>
<title>Aurelia</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body aurelia-app="main">
<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>
<!--<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>-->
</body>
</html>
export function configure(aurelia) {
aurelia.use
.standardConfiguration()
.developmentLogging();
aurelia.start().then(() => aurelia.setRoot());
}
<template>
<h4>Square details...</h4>
<ol>
<li>Square 1</li>
<li>Square 2</li>
<li>Square 3</li>
</ol>
</template>
<template>
<h4>Square Router View</h4>
<button class="btn btn-primary" click.delegate="onClick()">Set text from Square</button>
</template>
import {inject} from 'aurelia-framework';
import {EventAggregator} from 'aurelia-event-aggregator';
@inject(EventAggregator)
export class Square {
constructor(eventAggregator) {
this.ea = eventAggregator;
}
activate() {
this.ea.publish('my-router', {sidebarExtra: 'square-sidebar.html'})
}
onClick() {
this.ea.publish('my-router', {fname: 'Square'})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment