angular2应用用户输入

用户输入触发 DOM 事件。我们通过事件绑定来监听它们,把更新过的数据导入回我们的组件和 model 。
(1)绑定到用户输入事件

例子:建个app/click-me.component.ts文件
  @Component({
    selector: 'click-me',
    template: `
      <button (click)="onClickMe()">Click me!</button>
      {{clickMessage}}`
  })
  export class ClickMeComponent {
    clickMessage = '';      
    onClickMe() {
      this.clickMessage = 'You are my hero!';
    }
  }

等号左边为绑定的目标,右边为模板语句
写绑定时,我们必须知道模板语句的 执行上下文 。 出现在模板语句中的各个标识符,全都属于一个特定的上下文对象。 这个对象通常都是控制此模板的 Angular 组件。
selector:为自定义标签,文件必须在app.module中导入;
导入的有import { 文件的根模块 } from 文件路径;
<pre>@NgModule({
imports: [ BrowserModule ],
declarations: [ AppComponent,ClickMeComponent ],//每次新建最好都添加上
bootstrap: [ AppComponent,ClickMeComponent ]
})</pre>
还有在html中必须把标签涵盖进去;
(2)通过 $event 对象取得用户输入
我们可以绑定到所有类型的事件。让我们试试绑定到一个输入框的 keyup 事件,并且把用户输入的东西回显到屏幕上import { Component } from '@angular/core';

建个app/keyup.components.ts
      //模板
      template: `
      <input (keyup)="onKey($event)">
      <p>{{values}}</p>
    // without strong typing弱类型onKey事件    `
    export class KeyUpComponent_v1 {
    values = '';  
      onKey(event:any) {
        this.values += event.target.value + ' | ';
      }
    }
    // with strong typing强类型onKey事件
    export class KeyUpComponent_v1 {
      values = '';
      onKey(event: KeyboardEvent) {
       this.values += (<HTMLInputElement>event.target).value + ' | ';
      }
    }
    }

Angular 把事件对象存入 $event 变量中,也就是我们传到组件的 onKey() 方法中的那个。 我们希望取得的用户数据就在该变量中的某个地方。
$event 对象的形态取决于所触发的事件。 这个 keyup 事件来自 DOM ,所以 $event 必须是一个 标准的 DOM 事件对象 。 $event.target 给了我们一个 HTMLInputElement 对象,它有一个 value 属性,是用户所输入的数据。

使用强类型后,我们就能看出直接把 DOM 事件对象传到方法里的做法有一个严重的问题:过多模板细节,太少关注点分离。 ( 译注: onKey 不应该理会模板的实现细节,只接收传入字符串。需要强制转换类型是代码的坏味道。 )

keyup1-anim.gif
                                           #  `这个图形在输入框没有内容的时候在浏览器没有任何变化。`

(3)从一个模板引用变量中获得用户输入
还有另一种方式,不用通过 $event变量来获得用户数据。
Angular 有一个叫做 模板引用变量 的语法特性。 这些变量给了我们直接访问元素的能力。 通过在标识符前加上井号 (#) ,我们就能定义一个模板引用变量.
在一个超简单的模板中实现了一个聪明的按键反馈循环。如:

建个app/loop-back.component.ts
  @Component({
    selector: 'loop-back',
    template: `
      <input #box (keyup)="0">
      <p>{{box.value}}</p>
    `
  })
  export class LoopbackComponent { }

keyup-loop-back-anim.gif

(4)按键事件过滤 (通过 key.enter)
过滤按键,比如每一个 $event.keyCode ,并且只有当这个按键是回车键的时候才更新 values 属性。

修改app/keyup.components.ts 文件
  @Component({
    selector: 'key-up3',
    template: `
      <input #box (keyup.enter)="values=box.value">
      <p>{{values}}</p>
    `
  })
  export class KeyUpComponent_v3 {
    values = '';
  }

keyup3-anim.gif

每次回车之后会触发input内的事件返回p标签的vlaue
(5)blur( 失去焦点 ) 事件
(blur)监听用户输入框失去焦点的事件。

修改app/keyup.components.ts 文件
  @Component({
    selector: 'key-up4',
    template: `
      <input #box
        (keyup.enter)="values=box.value"
        (blur)="values=box.value">
      <p>{{values}}</p>
    `
  })
  export class KeyUpComponent_v4 {
    values = '';
  }

失去焦点的时候会产生事件values的值被显示出来

我们已经掌握了响应用户输入和操作的基础技术。 虽然这些基础技术确实强大,但在处理大量用户输入时难免显得笨拙。 我们在事件底层操作,但是真正应该做的是:在数据输入字段和模型属性之间建立双向数据绑定。
##这节结束了 请点个赞吧——_——

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

推荐阅读更多精彩内容