1. 说明

Angular2的模板用来显示组件外观,作为视图所用,用法和html语法基本一致,最简单的Angular2的模板就是一段html代码。Angular模板语法主要包括以下几个部分:

l 直接绑定

l 插值表达

l 属性绑定

l 事件绑定

l 双向绑定

l 样式绑定

l 模板和 *

l 局部变量

首先来看一个模板例子,如下所示:

import { Component, OnInit } from '@angular/core';

@Component({

selector: 'ui-demo',

template: ` <form class="form-horizontal" role="form">

<div class="form-group">

<legend title="form">title</legend>

</div>

<span class="label label-warning">attention:{{msg}}</span>

<div class="input-group">

<div class="input-group-addon">name</div>

<input type="text" class="form-control" id="name" name="name" [attr.size]="size" [placeholder]="name">

</div>

<div class="input-group">

<div class="input-group-addon">age</div>

<input type="text" class="form-control" (change)="change()" id="age" name="age" [placeholder]="age">

</div>

<div class="input-group">

<div class="input-group-addon">sex</div>

<input type="text" class="form-control" [(ngModel)]="sex" id="sex" name="sex" [placeholder]="sex">

</div>

<div class="input-group" *ng-if="needpwd">

<div class="input-group-addon">pwd</div>

<input #inPwd type="password" class="form-control" [(ngModel)]="pwd" id="pwd" name="pwd">

<button type="button" class="btn btn-warning" (click)="show(inPwd.value)">warn</button>

</div>

<div class="form-group">

<div class="col-sm-10 col-sm-offset-2" [style.color]="color">

<button type="submit" class="btn btn-primary" [class.btn-primary]="isPrimary">Submit</button>

</div>

</div>

</form>`

})

export class TemplateDemoComponent implements OnInit {

msg: string = "注意事项";

name: string = "name";

size: number = 4;

age: number = 15;

sex: string = 'male';

needpwd: boolean = true;

pwd: string = '';

color: string = "red";

isPrimary: boolean = true;

constructor() { }

ngOnInit() { }

change() {

}

show($event) {

console.log($event);

}

}

1.1 直接绑定

将字符串直接绑定在对应的属性上,例如将字符串 form 绑定到title属性上

<legend title="form">title</legend>

1.2 插值表达

插值表达采用{{}}的方式来表示,将组件中对应的表达式的值绑定到模板中进行显示,例如如下,将msg表达式的值在组件中显示

<span class="label label-warning">attention:{{msg}}</span>

1.3 属性绑定

属性绑定采用[]的方式来表示,将表达式的值绑定在对应的属性上,例如,将组件中name表达式得值绑定到属性placeholder 中

<div class="input-group">

<div class="input-group-addon">name</div>

<input type="text" class="form-control" id="name" name="name" [placeholder]="name">

</div>

当属性绑定的元素中存在对应的属性的时候可以直接采用[xx]进行绑定,但是,当元素上不存在对应的属性的时候,必须采用[attr.xxx]这样atrr在加上一个点的方式来绑定对应的属性信息。

<div class="input-group">

<div class="input-group-addon">name</div>

<input type="text" class="form-control" id="name" name="name" [attr.size]="size" [placeholder]="name">

</div>

1.4 样式绑定

样式绑定主要包括两个方便,内联样式style及外部样式class绑定。

1.4.1 Style绑定

style绑定在语法上类似于属性绑定。但方括号中的部分不是一个元素的属性名,而是包括一个 style 前缀,紧跟着一个点 (.) ,再跟着 CSS 样式的属性名。表示在指定的元素上使用该属性,形如: [style.style-perporty]。例如

<div class="form-group">

<div class="col-sm-10 col-sm-offset-2" [style.color]="color">

<button type="submit" class="btn btn-primary" [class.btn-primary]="isPrimary">Submit</button>

</div>

</div>

1.4.2 Class绑定

CSS 类绑定在语法上类似于属性绑定。但方括号中的部分不是一个元素的属性名,而是包括一个 class 前缀,紧跟着一个点 (.) ,再跟着 CSS 类的名字组成,形如: [class.class-name]。表示是否在该元素上使用该css类或者移除该css类,后面的值为true的话表使用,false表示移除

<div class="form-group">

<div class="col-sm-10 col-sm-offset-2" [style.color]="color">

<button type="submit" class="btn btn-primary" [class.btn-primary]="isPrimary">Submit</button>

</div>

</div>

1.5 * 与 <template>

首先我们来看一个 * 与  <template> 的例子,

<div class="input-group" *ng-if="needpwd">

<div class="input-group-addon">pwd</div>

<input type="password" class="form-control" [(ngModel)]="pwd" id="pwd" name="pwd">

</div>

* 是一种语法糖,让那些需要借助模板来修改 HTML 布局的指令更易于读写。NgFor、NgIf 和 NgSwitch 都会添加或移除元素子树,这些元素子树被包裹在 <template> 标签中。使用 * 前缀语法让我们忽略<template>标签,还原后的代码如下所示

<template [ngIf]="needpwd">

<div class="input-group">

<div class="input-group-addon">pwd</div>

<input type="password" class="form-control" [(ngModel)]="pwd" id="pwd" name="pwd">

</div>

</template>

1.6 局部变量

局部变量采用#xxx的方式来表示,在元素上使用该表达式的话则可以使用xxx来代表该元素,可以在同一元素、兄弟元素或任何子元素中使用局部变量。如下所示,可以在兄弟节点使用该变量代表该元素

<div class="input-group" *ng-if="needpwd">

<div class="input-group-addon">pwd</div>

<input #inPwd type="password" class="form-control" [(ngModel)]="pwd" id="pwd" name="pwd">

<button type="button" class="btn btn-warning" (click)="show(inPwd.value)">warn</button>

</div>

1.7 事件绑定

属性绑定采用()的方式来表示,将组件的方法绑定到对应的事件上,例如,将change函数绑定到change事件中,当change事件发生时会触发change函数。

<div class="input-group">

<div class="input-group-addon">age</div>

<input type="text" class="form-control" (change)="change()" id="age" name="age" [placeholder]="age">

</div>

1.8 双向绑定

双向绑定使用[()]的方式来表示,双向绑定是属性绑定与事件绑定的结合体。最常用的双向绑定是使用[(ngModel)]=”xxx”在表单中进行使用,修改表单中数据的时候会修改绑定的数据项。如下所示:当表单输入修改时,sex变量也会同步修改

<div class="input-group">

<div class="input-group-addon">sex</div>

<input type="text" class="form-control" [(ngModel)]="sex" id="sex" name="sex" [placeholder]="sex">

</div>

Angular2 模板语法的更多相关文章

  1. angular2系列教程(二)模板语法

    今天我们要讲的是angualr2的模板语法,官网写的很清楚,但我也用通俗易懂的讲法再罗列一下吧! 例子

  2. angular2的模板语法

    Angular 应用管理着用户之所见和所为,并通过 Component 类的实例(组件)和面向用户的模板来与用户交互. 从使用模型-视图-控制器 (MVC) 或模型-视图-视图模型 (MVVM) 的经 ...

  3. FreeMarker模板语法

    四.FreeMarker模板语法 要编写复杂的模板需要熟悉FreeMarker语法规则,官网有详细说明,中文帮助也比较详细了,下面这些内容是从网上收罗来的,感谢网友的分享,经过整理与修改的内容如下.建 ...

  4. PHPCMS标签:PC标签模板语法规则

    模板语法规则1.变量表示{$name} 被解析成 <?=$name?>,表示显示变量$name的值,其中的“name”由英文字母.数字和下划线组成首字母必须是英文字母或者下划线. 2.常量 ...

  5. 【Vue】浅谈Vue(一):从模板语法数据绑定、指令到计算属性

    写在前面 今年前端届比较有意思,从大漠穷秋发表文章比较angular和vue,继而致歉vue作者.社区,从谷歌辞去Angular Developer PM in China一职并且呼吁大家停止各种无谓 ...

  6. Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)

    前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...

  7. 【每天半小时学框架】——React.js的模板语法与组件概念

           [重点提前说:组件化与虚拟DOM是React.js的核心理念!]        先抛出一个论题:在React.js中,JSX语法提倡将 HTML 和 CSS 全都写入到JavaScrip ...

  8. 前端MVC Vue2学习总结(三)——模板语法、过滤器、计算属性、观察者、Class 与 Style 绑定

    Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解 ...

  9. Django学习笔记(3)——表单,测试和模板语法的学习

    一,表单form 为了接收用户的投票选择,我们需要在前段页面显示一个投票界面,让我们重写之前的polls/detail.html文件,代码如下: <h1>{{ question.quest ...

随机推荐

  1. 基于webmagic的爬虫项目经验小结

    大概在1个月前,利用webmagic做了一个爬虫项目,下面是该项目的一些个人心得,贴在这里备份: 一.为什么选择webmagic? 说实话,开源的爬虫框架已经很多了,有各种语言(比如:python.j ...

  2. 微信扫描打开APP下载链接提示代码优化

    上一次我发了一篇文章叫“微信打开网址添加在浏览器中打开提示”,里面我发出来了三个代码,分别是纯JS.js+html.jQuery+HTML代码.今天来一个简化版带可以关闭的按钮操作.使用的是纯JS+H ...

  3. Macbook被格式化之后

    macbook不小心被手贱格式化了,开机显示一个大问号. 于是查询得到恢复方式是使用command+R. 照做了,试了好几次,那个地球还是卡住不动的.都没有提示让我输入wifi密码. 于是又查了一下, ...

  4. [转]Extjs combo数据绑定与获取

    原文地址:http://www.cnblogs.com/loveme123/archive/2012/05/10/2494466.html 1. 配置combo: {                  ...

  5. 【UOJ #246】【UER #7】套路

    http://uoj.ac/contest/35/problem/246 神奇!我这辈子是想不出这样的算法了. 对区间长度分类讨论:题解很好的~ 我已经弱到爆了,看完题解后还想了一晚上. 题解中&qu ...

  6. 在asp.net mvc4项目里bootstrap datetimepicker控件的使用

    前段时间写了一篇关于调用阿里大于的短信接口来开发例会短信群发通知功能的文章http://www.cnblogs.com/zhouyuangan/p/apicall_1.html,其中的例会时间是需求中 ...

  7. P2有什么用

    今天我们学习第二个主题:组织主题 PRINCE2中指出,发起项目的组织需要将工作分配给各级经理,负责推进项目指导完成.项目是跨职能的,因此正常的直线型职能机构并不适合项目,组织主题描述了为有效管理项目 ...

  8. bzoj2555: SubString

    SAM+LCT维护parent tree版本 虽然说子树维护那套理论需要ETT 不过parent tree的根是固定的,所以用lct加一些奇怪的乱搞就行了 //随手拖个SAM的板子和LCT的板子,然后 ...

  9. 关于Scala的一些感想(一)

    最近在完成自己的开源项目Application-center的时候,使用了Scala编程语言. 在使用了一段时间下来以后,有一些不是很"清晰"的感受,说实话我自己还没有很好的整理清 ...

  10. mysql 函数 GROUP_CONCAT 单元格中最长字符串和excel导出问题

    GROUP_CONCAT 使用方式GROUP_CONCAT ([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) SELECT ...