美文网首页react & vue & angular
使用 Angular 结构指令

使用 Angular 结构指令

作者: 品品下午茶 | 来源:发表于2022-05-11 15:18 被阅读0次

    在 Angular 中,指令就是具有一定功能的类,可以为 Angular 应用的其他元素添加额外的功能。我们可以使用指令操作 DOM,改变 HTML 元素的外观和行为,等等。

    Angular 支持三类指令:

    1. 组件(Components): 与组件模板相关的指令,也是最常用的指令。
    2. . 结构指令(Structural directives):用于添加或移除 DOM 元素,从而改变 DOM 布局。
    3. . 属性指令(Attribute directives):修改 DOM 元素的外观,或重新定义其行为。也可以用于改变组件或其他指令的外观和行为。

    结构指令

    在 Angular 框架中,NgIfNgForNgSwithch 是三个最常用的结构指令:

    结构指令 说明
    NgIf 根据条件,添加或移除模板中的视图元素。
    NgFor 迭代一个列表中的数据项,把每一个数据项绑定到一个视图元素。
    NgSwitch 根据条件,在一组候选视图元素中,显示其中一个视图元素。

    NgIf

    ngIf 指令可以基于表达式的计算结果,添加或移除 DOM 中的 HTML 元素。如果表达式的计算结果是 true,就会把 HTML 元素 添加到 DOM 中;如果表达式的计算结果是 false,就会把 HTML 元素从 DOM 中移除。

    打开 my-app 项目,编辑 src/app/book/book.component.html,修改代码如下:

    <p *ngIf="name === '《三体》'">{{name}} book works!</p>
    <p *ngIf="name === '《球状闪电》'">{{name}} book works!</p>
    <button (click)="liked.emit(true)">喜欢</button>
    

    *ngIf="name === '《三体》'" 表示,如果组件的 name 属性的值是《三体》,那么 <p> 标签元素就会被绘制到页面上。

    应用运行效果如下:

    ngIf 指令

    因为我们在组件类中,设置的图书名称是《三体》,所以《三体》的视图被显示到页面上,而《球状闪电》则没有显示。

    使用浏览器的开发者工具,检查图书名称段落,可以发现下面的代码:

    <app-book _ngcontent-npt-c12="" _nghost-npt-c11="" ng-reflect-name="《三体》”>
        <p _ngcontent-npt-c11="">《三体》 book works!</p>
        <!--bindings={"ng-reflect-ng-if": "true”}—>
        <!--bindings={"ng-reflect-ng-if": "false”}—>
        <button _ngcontent-npt-c11="">喜欢</button>
    </app-book>
    

    Angular 在处理结构指令的地方添加了注释,这些注释作为占位符,帮助 Angular 框架放置合适的模板元素。

    NgFor

    我们可以使用 NgFor 指令能够循环处理数据项的集合,为每一个数据项绘制一个视图模板。

    1. 先定义一个图书的集合。打开 src/app/app.component.ts 文件,添加一个 books 属性,代码如下:
    export class AppComponent {
    …
      books = [
        '《三体》’,
        '《黑暗森林》’,
        '《死神永生》’,
        '《超新星纪元》’
      ]
    …
    }
    
    1. 然后,把图书集合展示到页面上。打开 src/app/app.component.html 文件,在文件最后面,添加如下内容:
    <ul>
      <li *ngFor="let book of books">{{book}}</li>
    </ul>
    

    通过 ngFor 指令,我们取出 books 数组中的每一个数据项,将该数据项作为一个本地变量 book,绑定到我们的视图模板。运行效果如下:

    ngFor 指令

    NgSwitch

    NgSwitch 能够在一组候选的视图元素中,根据条件选择一个视图元素进行显示。Angular 框架只把选中的视图元素添加到 DOM 中。

    NgSwitch 包含三个指令:

    指令 说明
    NgSwitch 属性指令,能够影响其他指令的行为。
    NgSwitchCase 结构指令,当绑定的值与计算的值相等时,添加其对应的视图元素到 DOM,否则移除该视图元素。
    NgSwitchDefault 结构指令,当计算的值与所有 NgSwitchCase 都不匹配时,添加其对应的视图元素。
    1. 打开 src/app/app.component.ts 文件,在组件类对定义中,添加 specialBook 属性:
    export class AppComponent {
        …
        
        specialBook = "《超新星纪元》”;
        
        …
    }
    
    1. 打开 src/app/app.component.html 文件,在文件最后面,添加如下内容:
    <div [ngSwitch]=“specialBook”>
      <p *ngSwitchCase="'《三体》'">{{specialBook}}</p>
      <p *ngSwitchCase="'《超新星纪元》'">{{specialBook}}</p>
      <p *ngSwitchCase="'《黑暗森林》'">{{specialBook}}</p>
      <p *ngSwitchDefault="'《死神永生》'">{{specialBook}}</p>
    </div>
    

    通过 ngSwitch 指令,我们计算 specialBook 的属性值,当一个 ngSwitchCase 指令的绑定值与其相同时, 把该 ngSwitchCase 指令对应的视图元素添加到 DOM,并进行展示。如果没有找到任何匹配的ngSwitchCase 指令,则将 ngSwitchDefault 指令对应的视图元素添加到 DOM,并进行展示。运行效果如下:

    ngSwitch 指令

    参考资料

    相关文章

      网友评论

        本文标题:使用 Angular 结构指令

        本文链接:https://www.haomeiwen.com/subject/wcjlurtx.html