博客
关于我
Angular入门到精通系列教程(10)- 指令(Directive)
阅读量:450 次
发布时间:2019-03-06

本文共 2121 字,大约阅读时间需要 7 分钟。

指令(Directive)在 Angular 开发中的应用

环境

  • Angular CLI: 11.0.6
  • Angular: 11.0.7
  • Node: 12.18.3
  • npm: 6.14.6
  • IDE: Visual Studio Code

摘要

指令(Directive)是 Angular 开发中的核心概念之一。在 Angular 1.0 时代(当时称为 AngularJS),指令是扩展 DOM 元素的主要手段。虽然随着时间推移,组件(Component)的普及使得指令的使用频率有所下降,但对理解 Angular 的核心机制仍至关重要。


组件与指令之间的关系

通过查看 Angular 源码,可以发现 Component 接口实际上是 Directive 的子接口。这意味着,组件本身也是一个特定类型的指令。与普通的指令不同,组件不仅可以定义 HTML 模板,还能通过 @Component 装饰器进行配置。


指令的种类

  • 组件(Component):作为特殊的指令,组件可以包含 HTML 模板。
  • 属性型指令:用于修改 DOM 元素的外观和行为,而不会改变 DOM 结构。典型的 Angular 内置指令包括 ngClassngStyle
  • 结构型指令:用于修改 DOM 结构。常用的结构型指令有 *ngFor*ngIf*ngSwitch。需要注意的是,同一个 HTML 元素上不能同时使用多个结构型指令,因此可以通过嵌套空元素的方式来解决。

  • Angular 中指令的用途

    指令在 Angular 中用于增强 DOM 功能。例如,可以通过自定义指令来:

    • 实现点击防抖动功能(避免双击后服务器未响应)。
    • 高亮显示特定内容。
    • 实现其他与 DOM 相关的交互功能。

    指令举例

    4.1 指令功能

    示例:实现鼠标悬停时显示黄色背景

    Highlight me!

    指令代码( HighlightDirective )

    import { Directive, ElementRef } from '@angular/core';
    @Directive({ selector: '[appHighlight]' })
    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;
    }
    }

    4.2 Angular CLI 生成基本文件

    通过 Angular CLI 快速生成指令模板:

    ng generate directive MyHighlight

    生成的文件包括 HTML、CSS 和 TypeScript 文件。

    4.3 指令核心代码

    完整的指令代码示例:

    import { Directive, ElementRef } from '@angular/core';
    @Directive({ selector: '[appHighlight]' })
    export class HighlightDirective {
    constructor(public el: ElementRef) {
    this.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;
    }
    }

    4.4 使用指令

    在 HTML 中使用自定义指令:

    Highlight me!


    总结

  • 指令(Directive) 用于扩展 DOM 元素或组件的功能。
  • 内置指令:如 *ngFor*ngIf*ngSwitch,用于 DOM 操作。
  • 组件(Component) 是特殊的指令,可包含 HTML 模板。
  • 通过上述内容,可以更好地理解 Angular 中指令的核心作用及其在实际开发中的应用场景。

    转载地址:http://totfz.baihongyu.com/

    你可能感兴趣的文章
    MySQL锁与脏读、不可重复读、幻读详解
    查看>>
    MySQL集群解决方案(4):负载均衡
    查看>>
    mysql颠覆实战笔记(八)--mysql的自定义异常处理怎么破
    查看>>
    MySQL高级-MySQL并发参数调整
    查看>>
    MySQL高级-视图
    查看>>
    MySQL:判断逗号分隔的字符串中是否包含某个字符串
    查看>>
    Nacos在双击startup.cmd启动时提示:Unable to start embedded Tomcat
    查看>>
    Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    Nacos配置中心集群原理及源码分析
    查看>>
    nacos配置自动刷新源码解析
    查看>>
    Nacos集群搭建
    查看>>
    nacos集群搭建
    查看>>
    Navicat for MySQL 查看BLOB字段内容
    查看>>
    Neo4j电影关系图Cypher
    查看>>
    Neo4j的安装与使用
    查看>>
    Neo4j(2):环境搭建
    查看>>
    Neo私链
    查看>>
    nessus快速安装使用指南(非常详细)零基础入门到精通,收藏这一篇就够了
    查看>>
    Nessus漏洞扫描教程之配置Nessus
    查看>>
    Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
    查看>>