Angular2+ 自定义指令@Directive

概述

所谓指令就是用于改变一个DOM元素的外观或行为,Angular2+为我们封装了很多的内置指令,项目中也无时无刻不在使用指令,Angular2+中有三类指令

结构型指: 通过添加和移除 DOM 元素改变 DOM 布局的指令,例如:NgForNgIf
属性型指令:改变元素、组件或其它指令的外观和行为的指令,例如:NgClass
组件:组件是一个模板指令,相信大家都很熟悉

今天我们来讲讲自定义指令,通过一个案例来学习自定义属性指令,需求是:在输入框输入值时,如果值中包含空格,我们把空客去掉

第一步、创建自定义指令

我们通过import从core库中导入Directive,HostListener,ElementRef的引入

Directive
用于@Directive装饰器功能,用于定义这个class是一个指令,通过@Directive修饰这样就拥有了指令的功能,我们在元组中声明selector属性值为[input-trim],方括号的写法表示是一个属性指令
还有以下几种写法:

element-name:使用元素名称选择

.class:使用类名选择

[attribute]:使用属性选择

[attribute=value]:使用属性和值选择

:not(sub_selector):只有当元素与sub_selector不匹配时才选择

selector1,selector2:选择择selector1或selector2

这里我们采用属性的方式指定选择器,在页面的使用是这样的(加粗部分)

<input type="text" id="name" input-trim />
如果你使用类名选择是这样的
<input type="text" id ="name" class="input-trim" />
以此类推
 

HostListener
HostListener 是属性装饰器,用来为宿主元素添加事件监,类似于我们原生JavaScript的addEventListener
@HostListener这里我们监听了keyup事件(可以定义原生JavaScript中的其他事件),当表单中有输入的时候我们就会调用方法,传递了一个$event对象进去,后面紧跟我们触法keyup事件的方法体

ElementRef(注意:需要在构造函数中注入进去)
用于获取获取DOM节点相关的属性
这里我们当我们在页面表单输入的时候,会调用keyupFun方法,首先判断是否有值输入,有的情况下,我们通过传递进来的evt获取value值,在调用trim()方法去除空格,赋值给elementRef.nativeElement.value渲染到页面

 

第二步、在app.module声明

我们的指令写好之后还要在app.module声明才能生效

第三步、在模板文件中引用指令

最后一步

打开浏览器在表单中输入,当我们敲空格,会被删除,看效果图。这样我们就实现了一个简单的去空格的指令,这里使用这个案例只是为了演示使用自定义指令

 

扩展:Host

这里如果我们不采用HostListener属性装饰器来监听事件,我们可以在指令的 metadata 信息中,设定宿主元素的事件监听信息,具体示例如下:

我们这里通过这种方式监听实践相当于在页面在定义了一个click事件,函数就是onClick(),当然这个onClick()需要我们在指令中进行定义。最好展示的效果跟上面方式是一样的。
这里不仅可以是监听事件,还可以自定义属性,看看下面代码

这里我们自定义了一个属性 role-data,对应值为data-trim(这里为了演示,此属性没有任何意义),再看看页面input表单中就会有一个role-data属性,看下面图片


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Angular 中,你可以通过自定义指令来扩展 HTML 元素的行为和功能。下面是自定义指令的基本步骤: 1. 创建指令类: - 创建一个新的类,用于定义你的指令。 - 使用 `@Directive` 装饰器来标记该类为一个指令,并传入一个配置对象。 下面是一个示例: ```typescript import { Directive, ElementRef } from '@angular/core'; @Directive({ selector: '[appCustomDirective]' }) export class CustomDirective { constructor(private elementRef: ElementRef) { this.elementRef.nativeElement.style.backgroundColor = 'yellow'; } } ``` 在上面的示例中,我们创建了一个名为 `CustomDirective` 的指令类,并使用 `@Directive` 装饰器来标记它为一个指令。`selector` 属性指定了该指令在模板中的使用方式,这里使用的是属性选择器 `[appCustomDirective]`。 2. 在模板中应用指令: - 在需要应用指令的元素上使用指令的选择器,可以是属性选择器、类选择器或标签选择器。 下面是一个示例: ```html <div appCustomDirective>Custom Directive Example</div> ``` 在上面的示例中,我们使用 `[appCustomDirective]` 属性选择器将自定义指令应用到了 `<div>` 元素上。 3. 使用指令提供的功能: - 在指令类中可以定义各种功能,如修改元素样式、监听事件、操作 DOM 等。 - 在构造函数中可以注入依赖,如 `ElementRef` 用于操作元素。 在上面的示例中,我们在指令类的构造函数中注入了 `ElementRef`,使用它来获取指令所应用的元素,并修改其背景颜色为黄色。 通过以上步骤,你就可以创建和使用自定义指令了。可以根据需求在指令类中实现各种功能,并在模板中应用指令来扩展元素的行为和功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值