美文网首页
04Angular属性型指令

04Angular属性型指令

作者: learninginto | 来源:发表于2020-10-15 21:16 被阅读0次
  • 指令的分类
  1. 组件(带模板的指令)
  2. 结构型指令(改变宿主文档结构)
  3. 属性型指令(改变宿主行为)
  • 内置指令

结构型指令(改变文档的结构):ngIf/ngFor/ngSwitch
属性型指令:ngClass/ngStyle/ngModel

<div [ngClass]="{'active':isActive,'disabled':isDisabled}">
<div [ngStyle]="{'property':'value'}" >
<input [(ngModel)]="userName">
  • 事件的处理和样式绑定
  1. [class.样式类名]="判断表达式"在应用单个class时常用
  2. 使用方括号[]是数据绑定,如果带方括号,等号后面就是一个对象或表达式
  3. 不使用方括号,等号后面Angular认为是一个字符串,使用{{}}时和方括号等效,通常使用的是[]
  4. 圆括号()用于事件绑定,等号后可以接表达式,也可以是一个定义在类中的函数
  5. 当使用自定义属性时,需要加attr前缀
<a href="#" [class.active] = 'selectedIdnex === i'
    (click) = "selectedIndex = i" >
    {{menu.title}}
</a>
<button type="button" class="btn" [class.btn-primary]="isPrimary">Primary</button>
//注意:这里的isPrimary只要为真(不等于undefined null 0 false NaN)就生效
<img [attr.data-img]="dataImg" [src]="srcImg" />

当然,有时还会用到绑定多个class的情况

语法:[class]="classExpr"(测试Array的绑定方式不可用),当然还可以用[ngStyle]的方式绑定,但后面可能会被废除

输入类型 范例
string "class1 class2"
object {foo: true, bar: false}
Array ["class1", "class2"]
  • eg:
let styles = {
    color:"#fff",
    backgroundColor:"c33" //驼峰式命名或background-color亦可
}
<p [style]="styles"></p>

注意:某个类或样式绑定越具体,它的优先级就越高;绑定总是优先于静态属性

  • 指令和组件的区别

组件外部的调用者,无法更改组件内部的结构。

指令可以应用于任何一个HTML的标签,可以改变某些行为

  • 指令的样式和事件绑定

指令没有模板,要寄宿在一个元素之上-宿主(Host)

  1. @HostBinding绑定宿主的属性或样式
  2. @HostListener绑定宿主的事件
    组件的样式中也可使用:host这样一个伪类选择器(应用于组件上)
  • 事件绑定/单击

通过$event传递事件对象

<p (click)="onClick('str',$event)">事件绑定</p>
  • ts
onClick(str:string, event:MouseEvent):void{
    console.log('str+event', str, event.target);
}
  • 既然是原生的方法,同样阻止一些冒泡事件
clickChild(event:MouseEvent):void{
    event:stopPropagation();
}

当然,如果只是单纯地阻止一个事件冒泡,没有必要另写了一个方法,可以直接在html的事件绑定中写

<p (click)="$event.stopProgagation();">阻止事件冒泡</p>
  • 事件绑定/input
<input type="text" (keyup)="onKeyup($event)"/>

不是所有的元素都有value属性,所以将target转换为输入元素。在非常确定event.target是HTMLInputElement时,通过类型断言告诉TypeScript不再验证。

onInput(event:KeyboardEvent){
    console.log('onInput',(event.target as HTMLInputElement).value)
}
  • HostListener装饰器让你订阅某个属性型指令所在的宿主DOM元素的事件
@HostListener('mouseenter',[$event]) onMouseEnter(event){
    console.log('event',event)
    this.highlight('yellow')
}
@HostListener('mouseleave') onMouseLeave(){
    this.highlight('')
}

相关文章

  • 04Angular属性型指令

    指令的分类 组件(带模板的指令)结构型指令(改变宿主文档结构)属性型指令(改变宿主行为) 内置指令 结构型指令(改...

  • angular4 学习第二天(内置指令)

    一、angular 内置指令学习(一) 属性型指令属性型指令会监听和修改其它HTML元素或组件的行为、元素属性(A...

  • Angular自定义指令

    我们知道angular指令分为结构型和属性型2种,今天就来研究一下自定义属性型指令。 上面我们定义了一个指令,如何...

  • 指令

    分类 组件:带有模版的指令 属性型指令:更改元素、组件或其他指令的外观或行为的指令。 结构型指令:通过添加和删除 ...

  • 2019-04-24

    结构型指令和属性型指令。 Angular 本身定义了一系列这两种类型的指令,你也可以使用 @Directive()...

  • angular 学习记录(六)

    一、自定义指令: 属性型指令至少需要一个带有@Directive装饰器的控制器类。该装饰器指定了一个用于标识属性的...

  • Angular2--属性型指令

    属性型指令 用于改变一个DOM元素的外观或行为。例如,内置的NgStyle指令可以同时修改元素的多个样式。 创建属...

  • Angular之自定义指令

    1.自定义指令这里我们说的指令可以理解为 属性型指令,主要是用来控制组件的外观的。 2.自定义指令的生成 3.目录...

  • Angular2 源码解读 - 自定义指令@Directive

    定义属性型指令用于改变一个DOM元素的外观或行为 案例@Directive({ selector : '[high...

  • Angular2--属性型指令单元测试

    属性型指令的单元测试 这里依然用文本高亮的指令来说明。 单一的单元测试 但是测试单一的用例无法探索该指令的全部能力...

网友评论

      本文标题:04Angular属性型指令

      本文链接:https://www.haomeiwen.com/subject/bkzopktx.html