Angular 数据绑定及指令

数据绑定

以下所有的例子都基于你已经创建好了一个angular项目。
所有的数据绑定,都需要你在ts文件中准备好你需要的数据。

1. 模板绑定/ 插值绑定

首先在ts文件中准备好需要的数据,然后在html文件中用{{}}使用数据。插值绑定更多的是用于显示数据,最简单的例子如下:

// html 文件,例如 test.component.html
<h1>{{name}}</h1>
// ts 文件,例如 test.component.ts
public name:string = 'Sun';
2. 属性绑定

2.1 DOM属性绑定
优先使用DOM属性绑定,语法是 [property] = "variable",基本属性例如 id,class,title等等;

// html 文件
One: <input type='text' [value]="myName" />
Three: <input type='text' value="{{myName}}" />
// ts 文件
public myName:string = 'Sun';

2.2 HTML 属性绑定
[attr.属性名字="表达式"],表达式的值会被绑定。例子如下:

// html 文件
<table>
    <tr>
      <th>Test</th>
      <th>Binding</th>
    </tr>
    <tr>
      <td [attr.colspan] = "tableColspan">仙女萝</td>
    </tr>
</table>
// ts文件
public tableColspan:string = '2';

为了看上去更清晰,我给table加了点css,效果如下:


attr属性绑定

2.3 css类绑定 (3种方式)

  • 方式一: 直接使用 [class] 绑定,这样的绑定方式会覆盖之前所有别的class样式。
// html 文件
<h1 class="apple" [class]="useClass">One</h1>
// ts 文件
public useClass:string = 'banana';
// css 文件
h1 {
    text-align: center;
}
.apple {
    color: skyblue;
    font-size: 20px;
}
.banana {
    color: orange;
}

效果如下:


class绑定一
  • 方式二:使用 [class.样式名字]="boolean",表达式的值为布尔类型; 通过表达式的值来判断是否追加这个class。
// html 文件
<h1 [class.apple]="isSpecial">Two</h1>
// ts 文件
public isSpecial:boolean = true;

效果如下(圈出来的这个蓝色的鸭):


class绑定二

图标样式也可以通过这个来添加的,例子如下:

<span *ngFor="let star of stars" class="glyphicon glyphicon-star"
[class.glyphicon-star-empty]="star"></span>
// ts 文件
private stars: boolean[];
this.stars = [false, false, true, true, true];
  • 方式三: [ngClass]="对象"
// html 文件
<div [ngClass]="{a:isA, b:isB, c:isC}">嘤嘤嘤</div>
// ts 文件
public isA:boolean = true;
public isB:boolean = true;
public isC:boolean = true;
// css 文件
.a {
    border: 1px solid black;
}
.b {
    color: pink;
}
.c {
    text-align: center;
    font-size: 22px;
}

效果如下:


class绑定三

2.4 样式绑定

  • 绑定单个样式的
// html 文件
<h2 [style.color]="isSpecial?'green':'orange'">奇变偶不变</h2>
<h2 [style.color]="pinkColor">符号看象限</h2> 
// ts 文件
public isSpecial:boolean = true;
public pinkColor:string = 'pink';

效果如下:


样式绑定
  • 绑定多个样式
    喜欢哪种用哪种鸭,例子如下:
// html文件 (那个 ft 记得在ts里面申请一个boolean类型的变量)
<div [ngStyle]="{'font-style':ft?'italic':'normal', 
'border': '1px solid black', 'width': '200px'}"> 
  一白遮百丑,一胖毁所有。
</div>
// html 文件
<div [ngStyle]="multiStyle"></div>
// ts 文件
public multiStyle: any = {
  color: pink,
  width: 200px,
  ... ...
}
3. 事件绑定

小括号表示这是个事件绑定,括号内是事件的名称。 $event 是事件对象,如果用不上可以不写,不传。
语法:(event)="xxx($event)"

// html 文件
<button (click)="clickMe()">点我鸭</button>
// ts 文件
clickMe():void {
  alert("鸭!你点我干啥!");
}

通过 $event 对象取得用户输入

<input (keyup)="onKey($event)">
<p>{{values}}</p>
// ts文件
public values:string = '';
onKey(event:any) {
    this.values += event.target.value + ' | ';
}  

模板引用变量(通过在标识符前加上#实现),这个真的很实用!很实用!很实用!一定要看两眼哒!!

// html 文件中
<input #box (keyup)="onKey(box.value)">
<p>{{values}}</p>
// ts 文件中
public values:string = '';
onKey(value: string) {
  this.values = value;
}

监听用户按下enter键,获取输入框的值

<input #box (keyup.enter)="values=box.value">
<p>{{values}}</p>

BLUR(失去焦点)事件

<input #box (keyup.enter)="values=box.value"
 (blur)="values=box.value">
<p>{{values}}</p>
4. 双向绑定

双向绑定其实就是属性绑定和事件绑定的结合。
语法: [(ngModel)]="xxx"
注意:如果你要使用 ngModel这个语法,一定一定一定要在 app.module.ts文件中导入 FormsModule:

FormsModule

如果有小可爱碰到了下面这个错误提示:
Can't bind to 'ngModel' since it isn't a known property of 'input'.
那就是因为你忘记导FormsModule了。

下面是双向绑定的例子:

// html 文件
<div>
  Input: <input [(ngModel)]="content">
</div>
Content: {{content}}
// ts 文件
public content:string = 'aaa';

分解看看就是这样:

// html 文件
<div>
  Input: <input type="text" #a [value]="content"
  (input)="inputChange(a.value)" /> 
</div>
Content: {{content}}
// ts 文件
public content:string = 'aaa';
inputChange(data) {
  this.content = data;
}

效果如下:


效果鸭

指令

angular中有3种类型的指令:组件指令、属性指令、结构指令。
1. 组件指令,举个例子:<router-outlet>
2. 属性指令,在上文中其实已经提及过了。就是[ngClass], [ngStyle] 这两个东西,具体用法在上文中也已经给了一些例子,这里就不详细的再解释一遍了。
3. 结构指令,在介绍结构指令之前,先重点的注意一下 *;结构指令中,星号是一个 “语法糖”,所以在使用结构指令的时候,千万别忘记加*

  • *ngIf 指令
    语法:*ngIf="表达式"
    我们可以通过使用 *ngIf这个指令向DOM中添加或者移除某个元素。
<p *ngIf="true">如果条件为真,那么你可以看到这段文字。</p>
  • *ngFor 指令
    语法:*ngFor="表达式"
    下面例子中的let person of people的意思是:
    取出people数组中的每个person,并在每次迭代时使用。
    let i = index是获取当前的索引,并且赋值给i
<li *ngFor="let person of people; let i=index">
  {{i+1}} --- {{person.name}}
</li>
// ts 文件
public people:any[] = [
  {name:'sun', age: 18},
  {name:'Lee', age: 21}
];

效果如下:


*ngFor指令例子效果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容