假设有这样一个需求:我们需要增强 HTML 里原生的 input 标签,让其达到,随着用户输入字符时,其颜色自动切换的效果。

这是一个典型的可以使用 Angular Directive 实现的需求。

每个 Directive 都有一个 host 元素。

Decorator that marks a DOM property as a host-binding property and supplies configuration metadata. Angular automatically checks host property bindings during change detection, and if a binding changes it updates the host element of the directive.

Directive 里,修改 @HostBinding 修饰的 Directive 属性,就相当于修改了 DOM 元素的属性本身。

同理,通过 @HostListener 修饰的事件处理函数,在 host 元素发生对应的事件之后,会自动被触发。

Rainbow 指令完整的实现代码:

import { Directive, HostBinding, HostListener } from '@angular/core';@Directive({selector: '[appRainbow]'
})
export class RainbowDirective{possibleColors = ['darksalmon', 'hotpink', 'lightskyblue', 'goldenrod', 'peachpuff','mediumspringgreen', 'cornflowerblue', 'blanchedalmond', 'lightslategrey'];@HostBinding('style.color') color: string;@HostBinding('style.borderColor') borderColor: string;@HostListener('keydown') onKeydown(){const colorPick = Math.floor(Math.random() * this.possibleColors.length);console.log('Jerry colorPick: ' + colorPick);this.color = this.borderColor = this.possibleColors[colorPick];}
}

消费这个指令的方法非常简单:

最后的效果:随着我在 input 字段里输入字段,input 字体颜色自动改变。

完整代码参考我的Github

更多Jerry的原创文章,尽在:“汪子熙”:

利用 Angular Directive 和 @HostBinding 实现输入文本框随着键盘输入自动变色效果相关推荐

  1. Firefox/Chrome下flash的wmode参数设为opaque或transparent时输入文本框中无法输入中文汉字的解决方法

    一.前言 这段时间做个项目,要涉及到flash开发.真悲催,之前没有接触过flash开发,于是找个哥们临时教了一下Adobe Flash CS5 的使用方法,感觉还蛮简单,所见即所得,和MFC下的开发 ...

  2. Firefox/Chrome下flash的wmode参数设为opaque或transparent时输入文本框中无法输入中文汉字的解决方法...

    这段时间做个项目,要涉及到flash开发.真悲催,之前没有接触过flash开发,于是找个哥们临时教了一下Adobe Flash CS5 的使用方法,感觉还蛮简单,所见即所得,和MFC下的开发有点像,渐 ...

  3. html email输入框,html5给文本框实现email域名自动完成效果

    产品反馈用户总是输错email的域名,因此服务器得到的email的地址是错误的.比如,有许多用户总将xxx@qq.com输入成xxx@qq.con. 这让后端很烦恼,因为这个email地址是合法的,但 ...

  4. 限制文本框(TextBox)只能输入数字(VB6代码)

    在一些要求只允许输入数值的场合,就用得上了. 基本思路是,先在文本框的keyPress事件里过滤键盘输入,再使用子类化将粘贴剪切等剪贴板操作吃掉. 窗体frmMain.frm内代码(窗体包含一个文本框 ...

  5. js控制文本框仅仅能输入中文、英文、数字与指定特殊符号

    JS 控制文本框仅仅能输入数字 <input οnkeyup="value=value.replace(/[^0-9]/g,'')"οnpaste="value=v ...

  6. 混合开发的坑(7) ---输入文本时,键盘遮挡

    CSS绝对定位于底部,输入文本时,键盘遮挡问题. 浏览器  正确 ios 正确 anroid 会遮挡  只能通过js来解决 转载于:https://www.cnblogs.com/huangqiao/ ...

  7. js 只准输入数字_js实现文本框只允许输入数字并限制数字大小的方法

    本文实例讲述了js实现文本框只允许输入数字并限制数字大小的方法.分享给大家供大家参考.具体如下: 这是一个很个性的输入框特效,规定文本框只允许输入数字,如果你执意要输入其它的字符,则输入的字符将自动消 ...

  8. 限制文本框中只能输入数字(+,-)的正则表达式写法

    最近由于项目要求,要限制文本框中只能输入数字,在网上翻查了许多资料,但符合项目实际要求的比较少. 据分析总结得以下代码,经测试在IE6.0+,ff,chrome下有效: <input type= ...

  9. Android Studio基础输入文本框EditText

    Android Studio基础输入文本框EditText 接续上一节<Android Studio 基础按钮使用> 1.提示文本框.输入文本框,在布局xml编写 <EditText ...

最新文章

  1. Boring counting HDU - 3518 (后缀数组)
  2. jaxb util_JAXB自定义绑定– Java.util.Date / Spring 3序列化
  3. 数字图像处理-7频域滤波
  4. Spyder:Python中机器学习的强大武器
  5. java+输出流++空值_一文搞定Java的输入输出流等常见流
  6. [Err] 1093 - You can't specify target table 'xxx' for update in FROM clause解决方法
  7. 月费10元起!中国移动推年轻人的第一张5G元素电话卡
  8. julia go python_过去的Python的四个挑战者:Swift、Go、Julia、R
  9. python怎样连续输入两个数字_在python中生成连续的数字,同时输入不变
  10. 性能分析工具GpProfile
  11. 2019.01.02 bzoj3513: [MUTC2013]idiots(fft)
  12. seo优化之如何选择产品
  13. C#中提供了三种类型的计时器的比较实验(转自百度文库)
  14. 目标追踪小任务(基于SIFT,LK光流,ceres)
  15. 用c语言判断一个数是否为素数
  16. 荣耀8微信总是无法连接服务器,微信无法登陆想要登陆的王者荣耀账号,怎么办?...
  17. J2EE基础之自定义标签2
  18. 机械振动信号15个时域统计指标
  19. android系统刷机,安卓手机刷机完全攻略 从此不再怕刷机
  20. 玩转树莓派 一、为你的树莓派烧录系统镜像

热门文章

  1. runloop解决Cell上主线程卡顿
  2. tomcat的根路径设置
  3. goroutine, channel 和 CSP
  4. Maven依赖Scope标签用法
  5. android意图传递参数返回结果(六)
  6. 到国外使用wifi悠着点防止天价帐单
  7. 设计模式--动态代理
  8. Python实现二叉树的非递归先序遍历
  9. 返回变量内容的错误示例和正确返回的4种方法
  10. 地图的平移、缩放的实现(android版)