Skip to content

Instantly share code, notes, and snippets.

@Thanood
Last active December 22, 2016 22:02
Show Gist options
  • Save Thanood/d0e8387e57ddd52e203bfe37a2bf03dd to your computer and use it in GitHub Desktop.
Save Thanood/d0e8387e57ddd52e203bfe37a2bf03dd to your computer and use it in GitHub Desktop.
Aurelia-Materialize bridge tabs dynamic
[md-tabs] .waves-effect {
position: static;
}
<template>
<require from="./app.css"></require>
<div class="row">
Default:
<ul md-tabs md-tabs.ref="tabsVM" class="z-depth-1" ref="tabControl">
<li repeat.for="tab of tabs" md-waves="color: primary;"><a href="${'#tab_'+tab.id}">${tab.title}</a></li>
</ul>
</div>
<div ref="tabContents">
<div repeat.for="tab of tabs" id.bind="'tab_' + tab.id" class="tab-content z-depth-1">
${tab.content}
</div>
</div>
<button md-button click.delegate="addTab()">add tab</button>
</template>
import {inject, TaskQueue} from 'aurelia-framework';
@inject(TaskQueue)
export class App {
tabs = [
{ id: 0, title: 'tab 1', content: 'content for tab 1' },
{ id: 1, title: 'tab 2', content: 'content for tab 2' },
{ id: 2, title: 'tab 3', content: 'content for tab 3' },
{ id: 3, title: 'tab 4', content: 'content for tab 4' }
];
constructor(tq) {
this.tq = tq;
}
addTab() {
const id = this.tabs.length;
this.tabs.push({
id, title: `tab ${id + 1}`, content: `content for tab ${id + 1}`
});
//this.tq.queueTask(() => {
//this.refresh();
//});
this.tabsVM.refresh();
}
refresh() {
$('li', this.tabControl).each(function(i, tab) {
$(tab).addClass('tab');
});
$('.tab-content', this.tabContents).each((i, tab) => {
if (this.tabsVM.selectedTab.index != i) {
$(tab).hide();
}
});
this.tq.queueTask(() => {
// window resize adjusts Materialize tab indicator
$(window).trigger('resize');
});
}
}
<!doctype html>
<html>
<head>
<title>Aurelia</title>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body aurelia-app="main">
<h1>Loading...</h1>
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.6/system.js"></script>
<script src="https://rawgit.com/aurelia-ui-toolkits/aurelia-materialize-bundles/0.20.2/config2.js"></script>
<script>
System.import('aurelia-bootstrapper');
</script>
</body>
</html>
/*******************************************************************************
* The following two lines enable async/await without using babel's
* "runtime" transformer. Uncomment the lines if you intend to use async/await.
*
* More info here: https://github.com/jdanyow/aurelia-plunker/issues/2
*/
//import regeneratorRuntime from 'babel-runtime/regenerator';
//window.regeneratorRuntime = regeneratorRuntime;
/******************************************************************************/
import 'materialize';
export function configure(aurelia) {
aurelia.use
.standardConfiguration()
.developmentLogging()
.plugin('aurelia-materialize-bridge', bridge => bridge.useAll() );
aurelia.start().then(a => a.setRoot());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment