⚡ Archival Guide: Modern Angular (v17+) Available
This tutorial is preserved for legacy applications maintaining historical AngularJS 1.x
architectures (with $scope and angular.module). For modern Angular
applications built with Standalone Components, Signals, and TypeScript, please refer to our
modern guide:
Modern Angular (v17+) Integration Tutorial →
When it comes to using Strelit Layout with Angular there's a large number of approaches. This tutorial covers the most basic one. For a more advances use case, please have a look at this tutorial.
Keeping it dead simple
This will be our app: Two controllers, nothing to it.
angular
.module('userModule', [])
.controller('user', function ($scope) {
$scope.name = 'John Dee';
})
.controller('userDetails', function ($scope) {
$scope.age = 38;
});
Our aim is to lay them out side by side with a splitter in between them:
Interactive Example: Angular Simple
Inspect, fork, and test this complete layout implementation live on CodePen:
Why can’t I just add ng-app to the body tag?
Angular looks for ng-app attributes and works its magic once the document is ready.
However, so does StrelitLayout. So in order to make the two work together you have to follow these
three steps:
- Create a Layout with StrelitLayout
- Load your templates into StrelitLayout’s containers
- Bootstrap Angular
Creating the layout
This one should be fairly straight forward by now. If not, have a look at the
getting started tutorial. Two container, side by side,
without headers. The only thing note-worthy is the
{ templateId: 'userNameTemplate' } bit. This will be used to tell
our component which template to load.
myLayout = new StrelitLayout({
settings: {
hasHeaders: false,
},
content: [
{
type: 'row',
content: [
{
type: 'component',
componentName: 'template',
componentState: { templateId: 'userNameTemplate' },
},
{
type: 'component',
componentName: 'template',
componentState: { templateId: 'userDetailTemplate' },
},
],
},
],
});
Loading Templates
For this example we’ll store our html in
template tags. (Not
supported in IE). This is only one of many ways to store and retrieve pieces of html. You could also
use Angular’s $templateCache or ng-include method, RequireJS’ text plugin, hidden divs, Ajax or
a number of other approaches.
<template type="text/html" id="userNameTemplate">
<div ng-controller="user" class="section"><strong>Username</strong> {{name}}</div>
</template>
<template type="text/html" id="userDetailTemplate">
<div ng-controller="userDetails" class="section"><strong>Age</strong> {{age}}</div>
</template>
Our component will retrieve the template’s html and inject it into the container.
myLayout.registerComponent('template', function (container, state) {
var templateHtml = $('#' + state.templateId).html();
container.getElement().html(templateHtml);
});
Bootstrapping our App
All that’s left now is to create our layout and, once it’s initialised, bootstrap Angular.
myLayout.on('initialised', function () {
angular.bootstrap(document.body, ['userModule']);
});
myLayout.init();