Angular 从入坑到挖坑 - 组件食用指南 (2)

没有可见的副作用:模板表达式只作为数据的展示,不应该改变任何的数据;应该构建出幂等的表达式,除非依赖的值发生变化,否则多次调用时,应该返回相同的数据信息

4.1.2.2、模板绑定语法

通过数据绑定机制,将数据源与视图进行绑定,从而实现源数据与用户呈现的一致性

从数据源到视图:插值、组件中的属性、dom 元素的 property 、css 样式、css 类

从视图到数据源:事件

视图与数据源之间的双向绑定:数据对象

分类 语法
单向
从数据源到视图
  1、插值表达式:{{expression}}
2、使用 [] 进行绑定:<a [href]='expression'></a>
3、使用 bind 进行绑定:<a bind-href='expression'></a>
 
单向
从视图到数据源
  1、使用 () 进行绑定:<a (click)='statement'></a>
2、使用 on 进行绑定:<a on-click='statement'></a>
 
双向
视图到数据源;数据源到视图
  1、使用 [()] 进行绑定:<input type="text" [(ngModel)]="product.Name">
2、使用 bindon 进行绑定:<input type="text" bindon-ngModel="product.Name">
 
import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-product-list', templateUrl: './product-list.component.html', styleUrls: ['./product-list.component.scss'] }) export class ProductListComponent implements OnInit { public title = '我是 title 属性值'; public styleProperty = '<b>我是包含 html 标签的属性</b>'; public fontColor = 'red'; public url = 'https://yuiter.com'; public name: string; constructor() { } ngOnInit(): void { } getUser() { alert('111111111'); } } <h3>2.1、从数据源到视图</h3> <p> <a href='http://www.likecs.com/{{url}}'>使用插值表达式进行绑定</a> </p> <p> <a [href]='url' [style.color]='fontColor'>使用 [] 进行绑定</a> </p> <p> <a bind-href='url'>使用 bind 进行绑定</a> </p> <p> <span [innerHtml]="styleProperty"></span> </p> <h3>2.2、从视图到数据源</h3> <p> <button (click)="getUser()">使用 () 进行绑定</button> </p> <p> <button on-click="getUser()">使用 on 进行绑定</button> </p> <h3>2.3、数据双向绑定 --- 需要在 AppModule 中添加对于 FormsModule 的引用</h3> <p> <input type="text" [(ngModel)]="name"> </p> <p> <input type="text" bindon-ngModel="name"> </p>

模板绑定语法

4.1.3、数据绑定

单向数据绑定

<p>{{title}}</p>

双向数据绑定

<input type="text" [(ngModel)]="name"> <!-- 当没有 NgModel 时,双向数据绑定等同于下面的写法 --> <input type="text" [value]="name" (input)="name=$event.target.value">

4.1.4、属性、样式绑定

dom 元素的 property 绑定

<img [src]="productImageUrl"> <img bind-src="productImageUrl">

html 标签的 attribute 绑定

attribute 绑定的语法类似于 property 绑定,由前缀 attr、点( . )和 attribute 名称组成

attribute 绑定的主要用例之一是设置 ARIA attribute(给残障人士提供便利)

<button [attr.aria-label]="actionName">{{actionName}} with Aria</button>

style 内联样式绑定

// 1、[style.width]="width" :string | undefined | null public width = "100px"; //2、[style.width.px]="width":number | undefined | null public width = "20"; // 3、[style]="styleExpr":string public styleExpr = "width: 100px; color:red"; // 4、[style]="styleExpr":{key:value} public styleExpr = {width: '100px', height: '100px'}; // 5、[style]="styleExpr":array public styleExpr = ["width", "100px"];

class 属性绑定

// 1、[class.foo]="hasFoo":bool | undefined | null public hasFoo = true; // 2、[class]="classExpr":string public classExpr = "my-class1 my-class2"; // 3、[class]="classExpr":{key:value} public classExpr= {my-class1: true, my-class2: true}; // 4、[class]="classExpr":array public classExpr= ["my-class1", "my-class2"];

4.1.5、事件绑定

在事件绑定中,可以通过 $event 参数获取到 dom 事件对象的属性从而获取到模板信息

<input type="text" (keyup)="getMsg($event)"> <p>输入的值:{{msg}}</p> import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-product-list', templateUrl: './product-list.component.html', styleUrls: ['./product-list.component.scss'] }) export class ProductListComponent implements OnInit { public msg: string; constructor() { } ngOnInit(): void { } getMsg(event: KeyboardEvent) { console.log(event); this.msg = (event.target as HTMLInputElement).value; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyfwf.html