Angular2 模板语法
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 模板语法的更多相关文章
- angular2系列教程(二)模板语法
今天我们要讲的是angualr2的模板语法,官网写的很清楚,但我也用通俗易懂的讲法再罗列一下吧! 例子
- angular2的模板语法
Angular 应用管理着用户之所见和所为,并通过 Component 类的实例(组件)和面向用户的模板来与用户交互. 从使用模型-视图-控制器 (MVC) 或模型-视图-视图模型 (MVVM) 的经 ...
- FreeMarker模板语法
四.FreeMarker模板语法 要编写复杂的模板需要熟悉FreeMarker语法规则,官网有详细说明,中文帮助也比较详细了,下面这些内容是从网上收罗来的,感谢网友的分享,经过整理与修改的内容如下.建 ...
- PHPCMS标签:PC标签模板语法规则
模板语法规则1.变量表示{$name} 被解析成 <?=$name?>,表示显示变量$name的值,其中的“name”由英文字母.数字和下划线组成首字母必须是英文字母或者下划线. 2.常量 ...
- 【Vue】浅谈Vue(一):从模板语法数据绑定、指令到计算属性
写在前面 今年前端届比较有意思,从大漠穷秋发表文章比较angular和vue,继而致歉vue作者.社区,从谷歌辞去Angular Developer PM in China一职并且呼吁大家停止各种无谓 ...
- Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)
前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...
- 【每天半小时学框架】——React.js的模板语法与组件概念
[重点提前说:组件化与虚拟DOM是React.js的核心理念!] 先抛出一个论题:在React.js中,JSX语法提倡将 HTML 和 CSS 全都写入到JavaScrip ...
- 前端MVC Vue2学习总结(三)——模板语法、过滤器、计算属性、观察者、Class 与 Style 绑定
Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解 ...
- Django学习笔记(3)——表单,测试和模板语法的学习
一,表单form 为了接收用户的投票选择,我们需要在前段页面显示一个投票界面,让我们重写之前的polls/detail.html文件,代码如下: <h1>{{ question.quest ...
随机推荐
- 数学的东西(BZOJ1951)
#include <cstdio> #define LL long long LL finmo=; LL fac[][],inv[][]; LL tmp[],rev[]; LL n,g,x ...
- VMware虚拟网络编辑器
摘要:很多已经使用VMware很久的同学,也没有接触过VMware的虚拟网络编辑器这个工具.其 实这个工具非常有用.功能也很强大. 我们都知道,安装了VMware软件后,系统中会自动出现VMnet ...
- CSS编写技巧
1.尽量少的使用全局的重置代码 全局重置代码:*{margin:0; padding:0;}对于熟悉CSS的人来说并不陌生,并且有很多人的第一句CSS代码就是这句.它可以避免不同浏览器的默认间距不同而 ...
- epub电子书--目录结构介绍
epub电子书简介 epub全称为Electronic Publication的缩写,意为:电子出版, epub于2007年9月成为国际数位出版论坛(IDPF)的正式标准,以取代旧的开放Open eB ...
- c#反射-动态加载dll简单例子
假设已有组件ClassLibraryTEST.dll,放置于程序目录下.组件中ClassLibraryTEST命名空间下有TEST类,类中有方法sum.下面示例就是动态加载组件并调用sum方法的简例: ...
- 解决:Linux版百度云客户端 BCloud网络错误 问题
国内很多云盘渐渐停止服务支持,如新浪.华为.115.360等... 强大的百度云,你会继续免费让大家使用吗? 今天在Linux上使用了liulang的BCloud百度云客户端,登陆之后不显示主页,什么 ...
- bzoj 1305 dance跳舞
最大流. 首先二分答案,问题转化为x首舞曲是否可行. 考虑建图,对每个人建立三个点,分别表示全体,喜欢和不喜欢. 源点向每个男生全体点连一条容量为x的边. 每个男生整体点向喜欢点连一条容量为正无穷的边 ...
- IE浏览器不能访问网页,google可以访问
现象:google浏览器可以进行网络访问,ie不能访问 原因:代理服务修改了局域网配置脚本 解决: Internet选项---连接---局域网设置: 去除勾选 “使用自动配置脚本”
- Mybatis传参数
1使用@Param注解传参数 mapper接口:public void updateUser(@Param("user")User user)throws Exception; m ...
- python学习笔记-(十三)堡垒机
1.课前准备: 本次学习堡垒机相关知识:之前,需要安装Python的paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作. 前提: python3.5程序安装到默认路径下并已添加pa ...