- 模型-视图-控制器(MVC)
- 模型-视图-视图模型(MVVM)
- Angular 组件相当于 控制器 或 视图模型
- Angular 模版相当于 视图
变量
模版输入变量
<hero-detail *ngFor = "let hero of heroes"
[hero] = "hero">
</hero-detail>
-
let 关键字创建了一个名叫hero 的模板输入变量
-
ngFor 指令每次迭代都从数组中把当前元素赋值给hero 变量
- 可以在
ngFor 的宿主元素(及其子元素)中引用模板输入变量hero
模版引用变量
- 模板引用变量通常用来引用 模板中的某个DOM元素
- 模板引用变量还可以用来引用Angular组件、指令 或 Web Component
- 可以在模板中的任何地方引用模板引用变量
<button #buttonDOM></button>
{{buttonDOM}}
<button ref-buttonDOM></button>
{{buttonDOM}}
[object HTMLButtonElement]
- 模板引用变量的值默认是设置模板引用变量的元素
- 模板引用变量的值也可以设置为其它内容的引用(比如表单中引用为
ngForm 指令)
<form #myForm="ngForm">
</form>
表达式
插值表达式
说明
插值表达式:在视图模板中,{{ }} 及{{ }} 中的内容。
-
{{ }} 中的内容,称为模版表达式
-
{{ }} 中的内容通常是组建类的属性或方法
- Angular 对
{{ }} 中的内容,先求值,再转成字符串
使用
<p> {{ name }} </p>
<img src="{{ imgUrl }}">
模版表达式
说明
模板表达式产生一个值。
模板表达式不支持内容:
- 赋值(
= )
- 操作并赋值(
+= 、-= 、... )
- 自增、自减(
++ 、-- )
-
new 运算符
- 使用
; 或 , 的链式表达式
- 位运算(
| 和 & )
支持内容(模版表达式运算符):
使用
{{ 1 + 1 }}
[property] = "expression"
表达式上下文
表达式上下文 是模版中各种绑定值的来源。
表达式上下文包括(优先级由高到低):
- 模版输入变量
- 模版引用变量
- 指令的上下文变量
- 模版对应组建类的实例
注意:
- 模板表达式只能引用表达式上下文中的成员
- 模板表达式不能引用全局命名空间中的任何东西(比如:
window 、document 、console.log )
模板表达式操作符
管道操作符(| )
管道是一个简单的函数,它接受一个输入值,并返回转换结果。
- 管道操作符会把它左侧的表达式结果传给它右侧的管道函数。
安全导航操作符(?. )
- 安全导航操作符用来保护出现在属性路径中
null 和undefined 值,保护视图渲染器,让它免于失败。
当person 不存在时,下面代码将报错,组件视图将无法渲染。
{{person.name}}
传统解决方法:
<ng-container *ngIf="person">
{{person.name}}
</ng-container>
{{person && person.name}}
安全导航操作符方式:
{{person?.name}}
非空断言操作符(! )
- 在 TypeScript 2.0 中,可以使用
--strictNullChecks 标志强制开启严格空值检查。
- 在严格空值检查模式下,如果有未赋值的变量,或者试图把
null 或undefined 赋值给不允许为空的变量,类型检查器就会抛出一个错误。
- 在严格空值检查模式下,如果类型检查器在运行期间无法确定一个变量是否是
null 或undefined ,也会抛出一个错误。
- 非空断言操作符(
! )用于告诉 TypeScript 的类型检查器对特定的属性表达式,不做 "严格空值检测"。
<div *ngIf="hero">
{{hero!.name}}
</div>
语句
模版语句
说明
模板语句用来响应由绑定目标(如 HTML 元素、组件或指令)触发的事件。
不支持内容:
- 操作并赋值(
+= 、-= 、... )
- 自增、自减(
++ 、-- )
-
new 运算符
- 位运算(
| 和 & )
- 模版表达式运算符
支持内容:
使用
(event)="statement"
语句上下文
语句上下文包括:
- 模版的
$event 对象
- 模版输入变量
- 模版引用变量
- 模版对应组件类的实例
注意:
- 模板语句只能引用语句上下文中的成员
- 模板语句不能引用全局命名空间中的任何东西(比如:
window 、document 、console.log )
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|