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

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

指令(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/

    你可能感兴趣的文章
    OSChina 周四乱弹 ——程序员为啥要买苹果手机啊?
    查看>>
    OSChina 技术周刊第十期,每周技术抢先看!
    查看>>
    OSError: no library called “cairo-2“ was foundno library called “cairo“ was foundno library called
    查看>>
    Osgi环境配置
    查看>>
    OSG中找到特定节点的方法(转)
    查看>>
    OSG学习:C#调用非托管C++方法——C++/CLI
    查看>>
    OSG学习:几何体的操作(二)——交互事件、Delaunay三角网绘制
    查看>>
    OSG学习:几何对象的绘制(三)——几何元素的存储和几何体的绘制方法
    查看>>
    OSG学习:几何对象的绘制(二)——简易房屋
    查看>>
    OSG学习:几何对象的绘制(四)——几何体的更新回调:旋转的线
    查看>>
    OSG学习:场景图形管理(一)——视图与相机
    查看>>
    OSG学习:场景图形管理(三)——多视图相机渲染
    查看>>
    OSG学习:场景图形管理(二)——单窗口多相机渲染
    查看>>
    OSG学习:场景图形管理(四)——多视图多窗口渲染
    查看>>
    OSG学习:新建C++/CLI工程并读取模型(C++/CLI)——根据OSG官方示例代码初步理解其方法
    查看>>
    Sql 随机更新一条数据返回更新数据的ID编号
    查看>>
    OSG学习:空间变换节点和开关节点示例
    查看>>
    OSG学习:纹理映射(一)——多重纹理映射
    查看>>
    OSG学习:纹理映射(七)——聚光灯
    查看>>
    OSG学习:纹理映射(三)——立方图纹理映射
    查看>>