<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>AngularJS with jquery and UI router plunk template</title>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
<link rel="stylesheet" href="./styles.css" />
<script src="https://jspm.io/system.js"></script>
<script data-require="jquery@3.1.1" data-semver="3.1.1" src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
System.import('./main');
</script>
</head>
<body>
<main class="jumbotron">
<div class="container">
<div class="col-sm-8 col-sm-offset-2">
<div ui-view=""></div>
</div>
</div>
</main>
</body>
</html>
import angular from 'angular';
import homeComponent from './home/home';
import routeModule from './route.config';
import parallel from './parallel.component';
import sub from './sub.component';
const main = angular.module('main', [routeModule])
.component('home', homeComponent)
.component('parallel', parallel)
.component('sub', sub);
angular.bootstrap(document.documentElement, ['main']);
export class HomeComponent {
constructor($state, $timeout) {
this.$state = $state;
this.$timeout = $timeout;
}
$onInit() {
console.log('Home Init');
// removing the `subOne` part breaks it even though these states have
// default deepStateRedirect
this.loadNextState('home.parallelOne.subOne')
.then(() => this.loadNextState('home.parallelTwo.subOne'))
.then(() => this.loadNextState('home.parallelThree.subOne'))
.catch(e => console.log(e));
}
loadNextState(state) {
return this.$timeout(() => this.$state.go(state));
}
}
export default {
selector: 'home',
controller: HomeComponent,
templateUrl: 'home/home.html'
}
<h2>Parallel States With Different Sub States</h2>
<button ui-sref="home.parallelOne">Load First</button>
<button ui-sref="home.parallelTwo">Load Second</button>
<button ui-sref="home.parallelThree">Load Third</button>
<section class="parallel row" ui-view="parallelOne">Loading...</section>
<section class="parallel row" ui-view="parallelTwo">Loading...</section>
<section class="parallel row" ui-view="parallelThree">Loading...</section>
import angular from 'angular';
import uiRouter from 'https://raw.githubusercontent.com/cdnjs/cdnjs/master/ajax/libs/angular-ui-router/0.4.2/angular-ui-router.js';
import uiRouterExtras from 'https://cdnjs.cloudflare.com/ajax/libs/ui-router-extras/0.1.3/ct-ui-router-extras.js';
const routeModule = angular.module('main.routes', [uiRouter, 'ct.ui.router.extras'])
.config(($stateProvider, $urlRouterProvider) => {
// Base
$stateProvider.state('home', {
url: '/home',
template: '<home />',
})
// ### Parallel 1 ###
$stateProvider.state('home.parallelOne', {
sticky: true,
deepStateRedirect: {
default: 'home.parallelOne.subOne'
},
views: {
parallelOne: {
template: '<parallel title="Parallel One" type="panel-primary" />'
}
}
})
defineSubStates('home.parallelOne');
// ### Parallel 2 ###
$stateProvider.state('home.parallelTwo', {
sticky: true,
deepStateRedirect: true,
views: {
parallelTwo: {
template: '<parallel title="Parallel Two" type="panel-success" />'
}
}
})
defineSubStates('home.parallelTwo');
// ### Parallel 3 ###
$stateProvider.state('home.parallelThree', {
sticky: true,
deepStateRedirect: {
default: 'home.parallelThree.subOne'
},
views: {
parallelThree: {
template: '<parallel title="Parallel Three" type="panel-info" />'
}
}
})
defineSubStates('home.parallelThree');
$urlRouterProvider.when('', '/home');
function defineSubStates(parent) {
['One', 'Two', 'Three'].forEach(i => {
$stateProvider.state(`${parent}.sub${i}`, {
template: `<sub number="${i}">`
})
})
}
});
export default routeModule.name;
.parallel {
margin-top: 20px;
}
a.active {
color: mediumvioletred;
}
export class ParallelComponent {
}
export default {
templateUrl: './parallel.template.html',
controller: ParallelComponent,
bindings: {
title: '@',
type: '@'
}
}
export class SubComponent {
}
export default {
template: `<h4>Sub state {{$ctrl.number}}</h4>`,
controller: SubComponent,
bindings: {
number: '@'
}
}
<div class="panel" ng-class="$ctrl.type">
<div class="panel-heading">
<h3 class="panel-title">{{$ctrl.title}}</h3>
</div>
<div class="panel-body">
<ul>
<li ng-repeat="link in ['subOne', 'subTwo', 'subThree']">
<a ui-sref=".{{link}}" ui-sref-active="active">{{link}}</a>
</li>
</ul>
<div ui-view></div>
</div>
</div>