深入浅析Angular中的指令、管道和服务

青灯夜游
Freigeben: 2021-09-18 10:58:13
nach vorne
2047 Leute haben es durchsucht

Angular中什么是指令、管道、服务?下面本篇文章带大家了解一下Angular中的指令、管道和服务,希望对大家有所帮助!

深入浅析Angular中的指令、管道和服务

1. 指令Directive

指令是Angular提供的操作DOM的途径。指令分为属性指令和结构指令。【相关教程推荐:《angular教程》】

属性指令:修改现有元素的外观或行为,使用[]包裹。

结构指令:增加、删除DOM节点以修改布局,使用*作为指令前缀

1.1 内置指令

1.1.1*ngIf

根据条件渲染DOM节点或移除DOM节点

没有更多数据
Nach dem Login kopieren
课程列表 没有更多数据
Nach dem Login kopieren

1.1.2[hidden]

根据条件显示DOM节点或隐藏DOM节点 (display)

没有更多数据
Nach dem Login kopieren

1.1.3*ngFor

遍历数据生成HTML结构

interface List { id: number name: string age: number } list: List[] = [ { id: 1, name: "张三", age: 20 }, { id: 2, name: "李四", age: 30 } ]
Nach dem Login kopieren
 
  • Nach dem Login kopieren
  • Nach dem Login kopieren
    identify(index, item){ return item.id; }
    Nach dem Login kopieren

    1.2 自定义指令

    需求:为元素设置默认背景颜色,鼠标移入时的背景颜色以及移出时的背景颜色

    Hello Angular
    Nach dem Login kopieren
    • 创建自定义指令

    $ ng g d appHover # 全称 ng generate directive
    Nach dem Login kopieren
    import { AfterViewInit, Directive, ElementRef, HostListener, Input } from "@angular/core" // 接收参的数类型 interface Options { bgColor?: string } @Directive({ selector: "[appHover]" }) export class HoverDirective implements AfterViewInit { // 接收参数 @Input("appHover") appHover: Options = {} // 要操作的 DOM 节点 element: HTMLElement // 获取要操作的 DOM 节点 constructor(private elementRef: ElementRef) { this.element = this.elementRef.nativeElement } // 组件模板初始完成后设置元素的背景颜色 ngAfterViewInit() { this.element.style.backgroundColor = this.appHover.bgColor || "skyblue" } // 为元素添加鼠标移入事件 @HostListener("mouseenter") enter() { this.element.style.backgroundColor = "pink" } // 为元素添加鼠标移出事件 @HostListener("mouseleave") leave() { this.element.style.backgroundColor = "skyblue" } }
    Nach dem Login kopieren

    2. 管道Pipe

    管道的作用是格式化组件模板数据。

    2.1 内置管道

    • date日期格式化

    • currency货币格式化

    • uppercase转大写

    • lowercase转小写

    • json格式化json数据

    {{ date | date: "yyyy-MM-dd" }}

    Nach dem Login kopieren

    2.2 自定义管道

    需求:指定字符串不能超过规定的长度

    // summary.pipe.ts import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'summary' }); export class SummaryPipe implements PipeTransform { transform (value: string, limit?: number) { if (!value) return null; let actualLimit = (limit) ? limit : 10; return value.substr(0, actualLimit) + '...'; } }
    Nach dem Login kopieren
    // app.module.ts import { SummaryPipe } from './summary.pipe' @NgModule({ declarations: [SummaryPipe] });
    Nach dem Login kopieren

    3. 服务Service

    3.1 创建服务

    $ ng g s services/TestService --skip-tests
    Nach dem Login kopieren
    import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class TestService { }
    Nach dem Login kopieren
    export class AppComponent { constructor (private testService: TestService) {} }
    Nach dem Login kopieren

    3.2 服务的作用域

    使用服务可以轻松实现跨模块跨组件共享数据,这取决于服务的作用域。

    • 在根注入器中注册服务,所有模块使用同一个服务实例对象

      import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class CarListService { }
      Nach dem Login kopieren
    • 在模块级别注册服务,该模块中的所有组件使用同一个服务实例对象

      import { Injectable } from '@angular/core'; import { CarModule } from './car.module'; @Injectable({ providedIn: CarModule, }) export class CarListService { }
      Nach dem Login kopieren
      import { CarListService } from './car-list.service'; @NgModule({ providers: [CarListService], }) export class CarModule { }
      Nach dem Login kopieren
    • 在组件级别注册服务,该组件及其子组件使用同一个服务实例对象

      import { Component } from '@angular/core'; import { CarListService } from '../car-list.service.ts' @Component({ selector: 'app-car-list', templateUrl: './car-list.component.html', providers: [ CarListService ] })
      Nach dem Login kopieren

      原文地址:https://juejin.cn/post/7008357218210807838

      作者:浅忆_0810

      更多编程相关知识,请访问:编程视频!!

      Das obige ist der detaillierte Inhalt von深入浅析Angular中的指令、管道和服务. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:掘金--浅忆_0810
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!