Skip to content

Latest commit

 

History

History
124 lines (92 loc) · 3.82 KB

File metadata and controls

124 lines (92 loc) · 3.82 KB

模板与数据绑定

显示数据

  • 使用插值表达式显示组件属性{{myProp}}
  • 使用反引号括起多行模板
  • 在按键、定时器、HTTP 请求等异步事件后更新视图
  • template/templateUrl属性存放内联模板或模板文件
  • 组件类属性变量赋值/构造函数初始化属性
  • ngFor指令渲染可迭代数据到迭代模板
  • 构造函数的参数属性定义数据类类型化数据
  • ngIf指令条件渲染数据

模板语法

  • Angular 模板支持几乎所有的 HTML 语法
  • <script>元素,它被禁用了,以阻止脚本注入攻击的风险
  • <html><body><base>没有意义

插值表达式(Interpolation)

插值表达式是一个特殊的语法,Angular 把它转换成了属性绑定

模板表达式(Template expressions)

  • 模板表达式会产生一个值,Angular 负责把这个值赋值给绑定目标的属性
  • 表达式中的上下文变量是由模板变量、指令的上下文变量(如果有)和组件的成员叠加而成的
  • 变量优先级:模板变量>上下文变量>组件成员
  • 模板表达式不能引用全局命名空间的任何东西
  • 以下表达式被禁止:
    • 赋值(=,+=,-=,...)
    • new运算符
    • 使用;或者,的链式表达式
    • 自增或自减操作符(++--)
  • 不同与 JavaScript 语法:
    • 不支持为运算符|&
    • 新增模板表达式运算符
  • 表达式指南
    • 没有可见副作用 - 模板表达式除了目标属性的值以外,不应该改变应用的任何状态
    • 执行迅速 - 表达式应该快速结束,计算代价高时考虑缓存
    • 非常简单 - 复杂的业务逻辑应在组件实现
    • 幂等性 - 表达式应该总是返回完全相同的东西,直到某个依赖值发生改变

模板语句(Template statements)

  • 模板语句用来响应由绑定目标(如 HTML 元素、组件或指令)触发的事件
  • 同模板表达式的上下文变量以及优先级
  • 避免写复杂的模板语句,常规是函数调用或者属性赋值
  • 不支持的 JavaScript 语法:
    • new运算符
    • 自增或自减操作符(++--)
    • 操作并赋值,例如+=-=
    • 位操作符|&
    • 模板表达式运算符

绑定语法

  • 在括号中 ([]()) 或是用前缀形式 (bind-on-bindon-) ,等号左边为目标名
  • 在 Angular 中,attribute 唯一的作用是用来初始化元素和指令的状态
  • 进行数据绑定时,只是在与元素和指令的 property 和事件打交道
  • 绑定的类型可以根据数据流的方向分成三类:
# 单向从数据源到视图目标
{{expression}}
[target]="expression"
bind-target="expression"

# 单向从视图目标到数据源
(target)="statement"
on-target="statement"

# 双向
[(target)]="expression"
bindon-target="expression"
  • 绑定目标
<!-- 元素的property,组件的property,指令的property -->
<img [src]="heroImageUrl" />
<hero-detail [hero]="currentHero"></hero-detail>
<div [ngClass]="{'special': isSpecial}"></div>

<!-- 元素的事件,组件的事件,指令的事件 -->
<button (click)="onSave()">Save</button>
<hero-detail (deleteRequest)="deleteHero()"></hero-detail>
<div (myClick)="clicked=$event" clickable>click me</div>

<!-- 事件与property -->
<input [(ngModel)]="name" />

<!-- attribute -->
<button [attr.aria-label]="help">help</button>

<!-- class property -->
<div [class.special]="isSpecial">Special</div>

<!-- style property -->
<button [style.color]="isSpecial ? 'red' : 'green'"></button>

属性绑定

事件绑定

双向数据绑定

内置指令

  • 内置属性型指令
  • 内置结构型指令

模板应用变量

输入输出属性

模板表达式操作符

  • 管道操作符
  • 安全导航操作符
  • 非空断言操作符