组件中的模板

组件ts的class中定义的变量,在组件内的html中可以直接使用双大括号进行引用

绑定数据

./src/app/components/home/home.component.ts

  1. // .......
  2. export class HomeComponent implements OnInit {
  3. title = '我是一个home组件'; // 定义一个类变量,不加修饰符默认为public。
  4. public student:object = {
  5. userName:'张三',
  6. age:15
  7. }
  8. // ..........
  9. }

./src/app/components/home/home.component.html

  1. <!-- 使用双大括号引用组件内变量 -->
  2. <h2>{{title}}</h2>
  3. <h2>
  4. <!-- 对象类型的也可以进行渲染 -->
  5. {{student.userName}}
  6. </h2>

ts中属性的值也可以在构造函数中进行赋值

  1. public msg:string;
  2. constructor() {
  3. this.msg = '这是msg';
  4. console.log('studet.age=' + this.student.age);
  5. }

绑定到html属性

  1. <div title='这是一个静态的title属性'>
  2. test1
  3. </div>
  4. <!-- 使用中括号,将ts中的msg变量绑定到title属性中 -->
  5. <div [title]='msg'>
  6. test2
  7. </div>
  8. <!-- 使用bind-前缀绑定属性 -->
  9. <img bind-src='itemImageUrl'>
  10. <!-- 等同于 <img [src]='itemImageUrl'> -->

绑定html代码

在ts中定义属性:

  1. public content:string = '<h2>这是一段html代码</h2>';

在html中获取content变量,并按html代码进行解析

不管是否为innerHTML属性,angular都不允许带有script标签的html泄露到浏览器中。

  1. <div [innerHTML]='content'></div>

进行简单运算

  1. <div>
  2. 计算 1+2={{1+2}}
  3. 计算 3+4 = {{ sum(3,4) }}
  4. </div>

在ts中定义sum方法

  1. sum(a, b) {
  2. return a+b;
  3. }

数组循环

普通循环

在ts中定义一个数组变量arr、newsList

  1. public arr:string[] = ['111', '222', '333'];
  2. public newsList:Array<string> = ['第一个新闻','第二个新闻','第三个新闻'];

在html中使用 ng-for 循环arr、newsListt变量:

  1. <ol>
  2. <!-- *ngFor="let 数组子项 of 数组变量" -->
  3. <li *ngFor="let item of arr">
  4. {{item}}
  5. </li>
  6. </ol>
  7. <ol>
  8. <li *ngFor="let item of newsList">
  9. {{item}}
  10. </li>
  11. </ol>

对象循环

在ts中定义一个数组变量userList

  1. public userList:any[] = [{
  2. name:'张三',
  3. age:12
  4. }, {
  5. name:'李四',
  6. age:18
  7. },{
  8. name:'王五',
  9. age:20
  10. }];

在html中使用 ng-for 循环userList变量:

  1. <ol>
  2. <li *ngFor="let item of userList">
  3. {{item.name}} 今年 {{item.age}} 岁
  4. </li>
  5. </ol>

循环嵌套

在ts中定义carsList变量

  1. public carsList:any[] = [{
  2. cate:'宝马',
  3. list:[{
  4. title:'宝马x1',
  5. price:'30万'
  6. },{
  7. title:'宝马x2',
  8. price:'32万'
  9. },{
  10. title:'宝马x3',
  11. price:'40万'
  12. }]
  13. },{
  14. cate:'奥迪',
  15. list:[{
  16. title:'奥迪q1',
  17. price:'10万'
  18. },{
  19. title:'奥迪q2',
  20. price:'22万'
  21. },{
  22. title:'奥迪q3',
  23. price:'30万'
  24. }]
  25. }];

在html中使用 ng-for 遍历汽车品牌,然后继续使用 ng-for 嵌套循环每个品牌的车型

  1. <ul>
  2. <li *ngFor="let item of carsList">
  3. <h2>{{item.cate}}</h2>
  4. <ol>
  5. <li *ngFor="let car of item.list">
  6. {{car.title}}价格:{{car.price}}
  7. </li>
  8. </ol>
  9. </li>
  10. </ul>

显示数组元素的索引

快捷方式 ng-for-index

在ts中定义数组变量

  1. public cars:any[] = [{
  2. title: '第一个新闻',
  3. desc: 'aaa'
  4. },{
  5. title: '第二个新闻',
  6. desc: 'bbb'
  7. },{
  8. title: '第三个新闻',
  9. desc: 'ccc'
  10. }];

在html中引入数组

  1. <ul>
  2. <!-- 将索引赋值给key,索引从0开始 -->
  3. <li *ngFor="let item of cars; let key = index">
  4. {{key}} : {{item.title}}
  5. </li>
  6. </ul>

模板引用变量

使用井号将一个dom元素声明为一个模板引用变量,该变量可以在html模板中直接使用

  1. <label>Type something:
  2. <!-- 此处的customerInput.value中的customerInput不是ts中定义的变量,而是前面#customerInput声明的input本身 -->
  3. <input #customerInput>{{customerInput.value}}
  4. </label>
  5. <!-- 将模板引用变量#heroForm传递给ts组件 -->
  6. <form #heroForm (ngSubmit)="onSubmit(heroForm)"> ... </form>
  7. <!-- 定义的#phone模板引用变量,在整个html模板内都可以使用 -->
  8. <input #phone placeholder="phone number" />
  9. <button (click)="callPhone(phone.value)">Call</button>
  10. <!-- 也可以使用ref-前缀代替井号 -->
  11. <input ref-fax placeholder="fax number" />
  12. <button (click)="callFax(fax.value)">Fax</button>

类型转换函数

有时候,绑定表达式可能会在AOT编译时报类型错误,并且它不能或很难指定类型,要消除这种报错,可以使用$any()转换成any类型

  1. <p>The item's undeclared best by date is: {{$any(item).bestByDate}}</p>