65.9K
CodeProject 正在变化。 阅读更多。
Home

Angular2 - 数据绑定

starIconstarIconstarIconstarIconstarIcon

5.00/5 (8投票s)

2017年1月19日

Apache

3分钟阅读

viewsIcon

19102

Angular2 中的数据绑定

什么是数据绑定?

数据绑定是 Angular2 用于在 UI 上显示数据并接收用户输入的一种机制。因此,组件(ts 文件中的类)的逻辑可以更轻松地与 UI(HTML/模板文件)交互。

好的,你能展示一下如何在 UI 上显示数据吗?

查看 users.html 文件,其中有一个循环语句,循环遍历数据集合并将其打印到浏览器中

<tr *ngFor="let user of users">
	<th scope="row">{{user.id}}</th>
	<td>{{user.firstName}}</td>
	<td>{{user.lastName}}</td>
	<td>{{user.userName}}</td>
	<td>
		<a title=""><i class="fa fa-edit"></i></a>
	</td>
</tr>

在此代码中,我们使用 {{user.userName}} 来显示 userName 的值到 UI,这就是单向数据绑定。

Angular2 中可以使用多少种类型的数据绑定?

主要使用了 3 种类型,它们是:

  • 单向绑定:仅用于在 UI 上显示数据。
  • 双向绑定:用于在 UI 上显示数据并接收来自 UI 的修改后的数据。
  • 事件绑定

你能更详细地解释一下单向绑定吗?

在单向绑定中,我们主要将其用于将数据显示到 UI。

我们使用 "{{变量名}}" 模式来实现这一点。

例如,在上面的示例中,在 users.html 文件中,我们使用 "{{user.firstName}}" 模式显示用户的 firstName

还有其他方法可以在 UI 上显示数据(单向绑定)吗?

除了使用 "{{}}" 之外,我们还可以使用 "[属性名]='值'" 模式。

在下面的示例中,我将其更改为

<td>{{user.firstName}}</td>

to

<td [innerText]="user.firstName"></td>

浏览器中的输出相同

仔细查看生成的 HTML,我们有

我们看到 "First Name" 的生成 HTML 与 "User Name" (和其他) 的 HTML 不同。

在某些情况下,我们可以使用这种方式并更新生成的元素的其他属性,如下所示:

<td [style.backgroundColor]="user.color" [innerText]="user.firstName"></td>

这将把 UI 更改为

我们有两种使用单向绑定方式,我应该使用哪一种?

每种类型的绑定都有其自身的用途。

对于第一种类型的绑定,我们应该用于以下情况:

<img src="http://tranthanhtu.vn{{user.avatar}}" />

我们也可以使用第二种类型的绑定来做到这一点。但它更复杂。

对于第二种类型的绑定,我们应该用于以下情况:

<td [style.backgroundColor]="user.color"></td>

对于这些情况,我们无法使用第一种方式实现。

双向绑定呢?

我们使用双向绑定来在 UI 上显示数据并接收用户输入。

如下面的示例所示,我们将显示所选用户的摘要。所选用户的名字和姓氏可以编辑。这些更改将立即更新。

users.html 中,在“edit”图标下方添加以下 HTML:

<a title="" (click)="onPreviewClicked(user)">
<i class="fa fa-eye-slash"></i></a>

Users 类中(在 users.ts 中),我们有:

export class Users {
    public currentSelected: any = null;
    public onPreviewClicked(user: any) {
        this.currentSelected = user;
    }
}

我们还在 users.html 中的当前表格下方添加以下 HTML:

<div *ngIf="currentSelected">
	<h3>Summary of {{currentSelected.firstName}}</h3>
	<form class="form-horizontal form-label-left">
		<div class="form-group">
			<label>First Name</label>
			<input class="form-control" 
			[(ngModel)]="currentSelected.firstName" name="first" />
		</div>
		<div class="form-group">
			<label>Last Name</label>
			<input class="form-control" 
			[(ngModel)]="currentSelected.lastName" name="last" />
		</div>
	</form>
</div>

当您单击“Preview”图标时,“First name”和“Last name”将显示所选用户的。

您的更改将自动更新

总而言之,我们使用 [(ngModel)]="currentSelected.firstName" 来在 UI 和组件逻辑之间进行双向数据绑定。

事件绑定呢?

在上面的示例中,我们将 (click) 事件绑定到组件中的 "onPreviewClicked" 方法。

我们使用此格式 (click)="onPreviewClicked(user)" 来绑定事件,如下所示:

<a title="" (click)="onPreviewClicked(user)">
<i class="fa fa-eye-slash"></i></a>

好的,我明白了,你能帮我总结一下 Angular 中的绑定吗?

我们有 3 种类型的绑定:

  1. 单向绑定:用于将数据显示到 UI
  2. 双向绑定:用于将数据显示到 UI 和用户输入
  3. 事件绑定:用于绑定指定的事件,例如:(click), ....

感谢您的阅读。

注意:如果您认为这篇文章对您有帮助,请点赞并与您的朋友分享,我将不胜感激。
© . All rights reserved.