Simple Angular integration

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();

Community & Support

Need help or have architectural questions?

Whether you are building complex multi-screen trading terminals, enterprise data workspaces, or migrating from legacy layout engines, the Strelit UI Kit engineering team and community are here to help.

Open an Issue on GitHub →