0

0

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

青灯夜游

青灯夜游

发布时间:2021-09-18 10:58:13

|

2389人浏览过

|

来源于掘金--浅忆_0810

转载

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

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

1. 指令 Directive

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

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

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

1.1 内置指令

1.1.1 *ngIf

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

没有更多数据
课程列表 没有更多数据

1.1.2  [hidden]

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

没有更多数据

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 }
]

  • identify(index, item){
      return item.id; 
    }

    1.2  自定义指令

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

    Hello Angular
    • 创建自定义指令

    $ ng g d appHover
    # 全称 ng generate directive
    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"
      }
    }

    2.   管道 Pipe

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

    2.1  内置管道

    JenMusic
    JenMusic

    一个新兴的AI音乐生成平台,专注于多乐器音乐创作。

    下载
    • date 日期格式化

    • currency 货币格式化

    • uppercase 转大写

    • lowercase 转小写

    • json 格式化json 数据

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

    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) + '...';
        }
    }
    // app.module.ts
    import { SummaryPipe } from './summary.pipe'
    @NgModule({
        declarations: [SummaryPipe] 
    });

    3.  服务 Service

    3.1  创建服务

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

    3.2  服务的作用域

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

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

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

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

      import { Component } from '@angular/core';
      import { CarListService } from '../car-list.service.ts'
      
      @Component({
        selector:    'app-car-list',
        templateUrl: './car-list.component.html',
        providers:  [ CarListService ]
      })
    原文地址:https://juejin.cn/post/7008357218210807838作者:浅忆_0810

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

    相关专题

    更多
    php源码安装教程大全
    php源码安装教程大全

    本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

    65

    2025.12.31

    php网站源码教程大全
    php网站源码教程大全

    本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

    43

    2025.12.31

    视频文件格式
    视频文件格式

    本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

    35

    2025.12.31

    不受国内限制的浏览器大全
    不受国内限制的浏览器大全

    想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

    41

    2025.12.31

    出现404解决方法大全
    出现404解决方法大全

    本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

    204

    2025.12.31

    html5怎么播放视频
    html5怎么播放视频

    想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

    9

    2025.12.31

    关闭win10系统自动更新教程大全
    关闭win10系统自动更新教程大全

    本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

    8

    2025.12.31

    阻止电脑自动安装软件教程
    阻止电脑自动安装软件教程

    本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

    3

    2025.12.31

    html5怎么使用
    html5怎么使用

    想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

    2

    2025.12.31

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Vue.js:纪录片
    Vue.js:纪录片

    共1课时 | 0.2万人学习

    Angular js入门篇
    Angular js入门篇

    共17课时 | 3.5万人学习

    Pandas 教程
    Pandas 教程

    共15课时 | 0.9万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号