小编给大家分享一下角中如何自定义创建指令,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强>指令介绍强>
在角中有三种类型的指令:
- <李>
组件,有模板的指令,组件是继承于指令的,只是扩展类与界面相关的属性。
李> <李>属性型指令,改变DOM元素,组件或其他指令的行为和外观的指令,如NgStyle, NgClass。
李> <李>结构型指令,通过添加或移除DOM元素改变DOM布局的指令,如NgIf, NgFor。
李>然而,在实际的开发中,根据业务的需要,我们经常会拓展角组件的指令来方便业务的开发。下面让我们来看看如何创建自己的指令。
<强>创建属性型指令强>
在角中,属性型指令的创建至少需要一个带有<代码> @Directive 代码>装饰器的控制器类。这个装饰器指定了一个选择器名称,用于标识与指令相关联的属性名称。控制器类实现了指令的功能行为。
接下来,我们创建一个简单的指令,实现鼠标在元素上悬停时,改变起背景颜色;鼠标移开时,背景颜色消失;鼠标点击时,字体变大;鼠标松开时,字体恢复原样的功能。
指令实现
创建background-exed.directive。ts文件,实现如下代码:
import {指令的不同之处是,HostListener, ElementRef,, Renderer2,, HostBinding },得到& # 39;@angular/核心# 39;; @Directive ({ ,,选择器:& # 39;[appBackgroundExe] & # 39; }) export class  BackgroundExeDirective { @Input才能(& # 39;appBackgroundExe& # 39;) ,,highLightColor:字符串; 构造函数才能(private elementRef:, elementRef,, private 渲染器:,Renderer2), { ,,,//,这种写法比较丑陋 ,,,//,this.elementRef.nativeElement.style.background =, & # 39;黄色# 39;; ,,,//,推荐这种写法,渲染器 ,,,this.renderer.setStyle (this.elementRef.nativeElement, & # 39;背景# 39;,,& # 39;黄色# 39;); ,,} @HostBinding才能(& # 39;class.pressed& # 39;) ,,isPressed:布尔; @HostListener才能(& # 39;mouseenter& # 39;) onMouseEnter才能():,void { ,,this.highLight (this.highLightColor); ,,} @HostListener才能(& # 39;mouseleave& # 39;) onMouseLeave才能():,void { ,,,this.highLight(空); ,,} @HostListener才能(& # 39;mousedown& # 39;) onMouseDown才能():,void { ,,,this.isPressed =,真的; ,,} @HostListener才能(& # 39;mouseup # 39;) ,,onMouseUp (): void { ,,,this.isPressed =,假; ,,} private 才能突出(颜色:字符串):,void { ,,,//,this.elementRef.nativeElement.style.background =,颜色; ,,,this.renderer.setStyle (this.elementRef.nativeElement, & # 39;背景# 39;,,颜色); ,,} }
其中,<代码>选择器:& # 39;[appBackgroundExe] & # 39; 代码>是指令关联的属性名称,以便角在编译时,能从模板中找到与此指令关联的HTML代码。
构造函数中,注入了<代码> ElementRef 代码>和<代码> Renderer2 代码>模块的实例。通过<代码> ElementRef 代码>我们可以引用指令标识的DOM元素,并对其进行相关的操作,并且可以利用<代码> Renderer2> 代码提供的API对元素进行相关的渲染操作。
<代码> @HostListener 代码>和<代码> @HostBinding> 代码是属性装饰器。<代码> @HostListener> 代码是用来为宿主元素添加事件监听;而指令标记的元素,就是宿主元素。<代码> @HostBinding> 代码是用来动态设置宿主元素的属性值。
<强>设置字体样式强>
- <李>
appliation.component.less
李>.pressed { ,,字体大小:30 px; }
<>强在模板中使用指令强>
- <李>
application.component.html
李>& lt; div 类=皃anel panel-primary"比; & lt;才能div [appBackgroundExe]=? # 39;红色# 39;“在鼠标移进,元素变成红色。鼠标移出,元素红色消失& lt;/div> & lt;/div>
<强>创建结构型指令强>
结构型指令的创建与属性型指令创建大同小异。
<强>指令实现强>
import {,指令,输入,,TemplateRef,, ViewContainerRef },得到& # 39;@angular/核心# 39;; @Directive ({ ,,,选择器:,& # 39;[appIf] & # 39; }) export class  IfDirective { ,,,构造函数( ,,,,,,,private templateRef:, TemplateRef角中如何自定义创建指令