首页 >> 大全

手把手教你使用Angular之指令

2023-09-01 大全 30 作者:考证青年

原文转自:轻样知生 - 手把手教你使用之指令 -

官方手册中,上一篇所讲的组件其实是被归纳到指令中的。博主之所以分开介绍,是为了让初学者能够准确将它们区分,毕竟在用法和使用场景上,组件跟下面介绍的两种指令是完全不同。本文主要介绍指令的基本概念以及如何自己制作一个指令。下面为大家详细介绍:

一、结构型指令

所谓结构型指令,可以理解为直接控制DOM树的指令。官方给出的定义是通过添加和移除 DOM 元素改变 DOM 布局的一类指令。(原文: — the DOM by and DOM .)我们常用的*ngIf和*ngFor就是结构性指令。该指令必须通过@装饰器来修饰示例如下:

import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
@Directive({ selector: '[visible]'})
export class UnlessDirective {private hasView = false;constructor(private templateRef: TemplateRef,private viewContainer: ViewContainerRef) { }@Input()set visible(condition: boolean) {if (condition && !this.hasView) {this.viewContainer.createEmbeddedView(this.templateRef);this.hasView = true;} else if (condition && this.hasView) {this.viewContainer.clear();this.hasView = false;}}
}

上例中,自定义通过和来实现对页面上DOM的操控。当指令的值为true时,通过将模板注入到容器中来显示DOM,否则清理容器,清除DOM。需要注意的是,指令选择器的名字和指令Input属性的名字必须相同。否则,指令无法生效。和ngIf一样,可以使用*或[]来使用该指令。

二、属性型指令

所谓的属性型指令,个人理解为,通过属性型指令,我们可以控制页面元素的某些属性。官方给的定义是改变元素、组件或其它指令的外观和行为的指令。同样,本身也有属性型指令,如:。

属性型指令的定义方法和结构型指令一样,使用@装饰器来修饰:

import { Directive, ElementRef } from '@angular/core';
@Directive({selector: '[yellow]'
})
export class HighlightDirective {constructor(el: ElementRef) {el.nativeElement.style.backgroundColor = 'yellow';}
}

可以通过在元素上使用[]来设置背景颜色为黄色。在实际的场景中,经常会使用@修饰符,以通过页面事件来实现动态控制。示例代码片段如下:

@HostListener('mouseenter') onMouseEnter() {this.highlight('yellow');
}
@HostListener('mouseleave') onMouseLeave() {this.highlight(null);
}
private highlight(color: string) {this.el.nativeElement.style.backgroundColor = color;
}

将上一个实例中构造函数的函数体中的代码删掉,并添加上述代码片段即可实现鼠标选中文字时,选中部分背景色变成黄色。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了