Create AEM Component using Angular 2 JS
Create AEM component using Angular 2 js is one of the most awaited tutorial. This tutorials is in series with Integrate AEM with Angular 2 js, it is advised to go through it first before starting this tutorial.
In this tutorial i am going to cover how to create a component using angular2 js, also i have tried to add most of the commonly used components like text field, checkbox, combo box , text area etc.
Create rendering component using angular 2:-
Lets create a rendering component that content author will drag and drop from side kick to newly created page, Follow below steps to create a component in angular 2
- Go to /apps/angular2-demo/components/content.
- Right click and create a new component and enter below details.

- Click next and add Allowed Parent as */*parsys.

- Click next and Finish.
- Open angular2-text-component.jsp and add below code.
<%--
Angular 2 Text Component .
this is demo component
--%><%
%><%@include file="/libs/foundation/global.jsp"%><%
%><%@page session="false" %><%
%><%
// TODO add you code here
%>
<cq:include script="/libs/wcm/core/components/init/init.jsp"/>
<cq:include path="par" resourceType="foundation/components/parsys"/>
<cq:includeClientLib categories="app.angular2-demo"/>
<head>
<title>Hello World</title>
<script>
System.config({
transpiler: 'typescript',
typescriptOptions: { emitDecoratorMetadata: true },
packages: {'app': {defaultExtension: 'ts'}},
map: { 'app': '/apps/angular2-demo/components/content/angular2-text-component/ts' }
});
System.import('app/environment_main')
.then(null, console.error.bind(console));
</script>
</head>
<body>
<my-app>Loading...</my-app>
</body>
Create client lib folder for this component:-
- Select /apps/angular2-demo/components/content/angular2-text-component and create a new node with name clientlibs and type cq:ClientLibraryFolder.
- Select clientlibs folder and add categories property to it
- Name:- categories
- type:- String[]
- value:- app.angular2-demo
- Select clientlibs folder and create a new folder inside clientlibs with name angularNativeJs {you can use any name}.
- Upload angular2.js that we have downloaded in above steps in js folder. For uploading either use webdav or vault. If you are not familiar with both just create a new file with name angular2.js under js folder and copy paste the code from downloaded angular2 js file to this file.
- Repeat the above steps for es6-shim.min.js, system-polyfills.js, angular2-polyfills.js, system.js, typescript.js, Rx.js.
- Create js.txt file parallel to js folder and add below line to it.
#base=js es6-shim.min.js system-polyfills.js angular2-polyfills.js system.js typescript.js Rx.js angular2.js
Create TS folder to store TypeScript Files for this Component:-
- Select /apps/angular2-demo/components/content/angular2-text-component and create a new folder by name ts.
- Select ts folder and create a new file environment_app.component.ts and enter below code into it.
import {Component, View} from "angular2/core";
@Component({
selector: 'my-app',
})
@View({
template: '<h1>Welcome to Angular 2 Demo</h1>'+
'<h1>Text ({{textValue}})</h1>'+
'<h3> Description ({{textDesc}})</h3>'+
'Name: <input #textbox type="text" [(ngModel)]="textValue" required><br><br>'+
'Element Type: "{{textbox.type}}"<br><br>'+
'Address : <textarea #textarea [(ngModel)]="textDesc" rows="4"></textarea><br><br>'+
'Element Type: "{{textarea.type}}"<br><br>'+
'Option : <input #cb1 type="checkbox" value="one"> One <input #cb2 type="checkbox" value="two"> Two<br><br>'+
'Element Type: "{{cb1.type}}"<br><br>'+
'Gender : <input #rb1 name="sex" type="radio" value="M"> Male <input #rb2 name="sex" type="radio" value="F"> Female<br><br>'+
'Element Type: "{{rb1.type}}"<br><br>'
})
export class AppComponent {
public textValue = "Default value";
public textDesc = "Default Description"
}
- The first line will import the Component and View package from angular2/core.
- The @Component is an Angular 2 decorator that allows you to associate metadata with the component class.
- The my-app can be used as HTML tag to injecting and can be used as a component, Means my view will render the component inside<my-app> tag in my jsp or html file..
- The @view contains a template that tells Angular how to render a view.
- The export specifies that, this component will be available outside the file. We can also initialize variables default values or can modify the values by calling a method from view and returning user values from method inside export class.
Select ts folder and create a new file environment_main.ts and enter below code into it.
import {Component} from 'angular2/core';
import {bootstrap} from "angular2/platform/browser"
import {AppComponent} from "./environment_app.component"
bootstrap(AppComponent);
- The environment_main.ts file tells Angular how to load the component. To launch the application, we need to import both Angular’s browser bootstrap function and root component of the application.
- After importing, the bootstrap is called by passing the root component type i.e. AppComponent.
Create Template for rendering our component:-
Lets create a template which we are going to use to render our angular 2 component. Follow below steps to create Template in aem:-
- Go to /apps/angular2-demo/templates.
- Right click and create new template and enter below details.
- Enter AllowedPath as /content(/.*)?
- Click next and Finish.
- Click Save All.

Test Angular 2 AEM Component:-
Congratulations You have successfully create Angular 2 component in AEM. Click here to download code package.





Leave a Reply