A template is a HTML view that tells Angular for render your components in the views.
The templateUrl
- The relative path or absolute URL of a template file for an Angular
component. If provided, do not supply an inline template using template.
The template
- An inline template for an Angular component If provided, do not supply a
template file using templateUrl.
When you have a complex view, then it recommended
by Angular to create that complex view in an external HTML file instead of an
inline template.
The Angular component decorator provides a property called templateUrl. This property takes the path of an external HTML file.
The Angular templates are very similar to Angularjs but Angular has some small syntactical changes.
The Angular component decorator provides a property called templateUrl. This property takes the path of an external HTML file.
The Angular templates are very similar to Angularjs but Angular has some small syntactical changes.
You can see the changes as below,
1. {}: Is use to rendering the HTML elements.
2. []: Is use to binding properties.
3. (): Is use to handling your events.
4. [()]: Is use to data binding.
5. *: Is use to asterisk Operations like *ngFor="let item of items; let i=index;”
The templates can be inline or external separate files.
How to use {}, [], [] and [()] in Angular Template?
Here, I am using “Inline Template” in the user components i.e.
import { Component } from '@angular/core'; @Component({ selector: 'Users', template: `<div> <input (keyup)="onKey($event)" (click)="onClick()"/> <div [hidden]="isActive" class="info"> <h2>Active element or Not?</h2> <div>{{values}}</div> </div> </div>`, styleUrls: ['./user.component.css'] }) export class UsersComponent { values: string; isActive: boolean = false; onKey(event) { this.isActive = true; this.values += event.target.value; } }
What are differences of using template and templateUrl in Angular Component?
Inline templates are specified directly in the component using template and it is more complex for bigger templates. As per expert suggestions, use templates and styles into a separate file, when your code more than 5 to 10 lines.
External templates define the HTML in a separate file and reference this file in templateUrl.
To use a relative path in the templateUrl we must include import component form @angular/core
Some befits for template Urls i.e.
1. Separations of code
2. Easy debugging
The upcoming offline template compiler will inline templates linked by templateUrl.
Example for Inline Template -
import { Component } from '@angular/core'; import { CommonModule } from '@angular/common'; import { HttpModule, Http } from '@angular/http'; import { UserService } from '../service/user.service'; import { AppGlobals } from '../../shared/app.globals'; @Component({ selector: 'users-app', template: `<div *ngFor="let user of users; let i = index"> <div>{{user.id }}</div> <div>{{user.id | barcodepipe:true}}</div> <div>{{user.login}}</div> <div>{{user.description}}</div> <div><a href="{{user.public_members_url}}" target="_blank">{{user.public_members_url}}</a></div> </div>`, styleUrls: ['./user.component.css'], providers: [UserService, AppGlobals], }) export class UsersApp { //USERS DECLARATIONS. users = []; //USER COMPONENT CONSTRUCTOR. constructor(private _userService: UserService, private _global: AppGlobals) { } //GET USERS SERVICE ON PAGE LOAD and BIND UI GRID. ngOnInit() { this._userService.getAPIUsers(this._global.baseAPIUrl + 'users/api/GetUsers').subscribe(data => this.users = data); } }
Example for external templates - Separate file-
import { Component} from '@angular/core'; import { CommonModule } from '@angular/common'; import { HttpModule, Http } from '@angular/http'; import { UserService } from '../service/user.service'; import { AppGlobals } from '../../shared/app.globals'; @Component({ selector: 'users-app', templateUrl: './user.component.html', styleUrls: ['./user.component.css'], providers: [UserService, AppGlobals], }) export class UsersApp { //USERS DECLARATIONS. users = []; //USER COMPONENT CONSTRUCTOR. constructor(private _userService: UserService, private _global: AppGlobals) { } //GET USERS SERVICE ON PAGE LOAD and BIND UI GRID. ngOnInit() { this._userService.getAPIUsers(this._global.baseAPIUrl + 'users/api/GetUsers').subscribe(data => this.users = data); } }
I hope you are enjoying with this post! Please share with you friends!! Thank you!!!