目录
1. 指令 Directive
2.   管道 Pipe
3.  服务 Service
3.2  服务的作用域
首页 web前端 js教程 深入浅析Angular中的指令、管道和服务

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

Sep 18, 2021 am 10:58 AM
angular 指令 服务 管道

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

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

1. 指令 Directive

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

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

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

1.1 内置指令

1.1.1 *ngIf

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

<div *ngIf="data.length == 0">没有更多数据</div>
登录后复制
<div *ngIf="data.length > 0; then dataList else noData"></div>
<ng-template #dataList>课程列表</ng-template>
<ng-template #noData>没有更多数据</ng-template>
登录后复制

1.1.2 [hidden]

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

<div [hidden]="data.length === 0">没有更多数据</div>
登录后复制

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 }
]
登录后复制
<!--  
    i: 索引
    isEven: 是否为偶数行
    isOdd: 是否为奇数行
    isFirst: 是否是第一项
    isLast: 是否是最后一项
-->
<li
    *ngFor="
      let item of list; 
      let i = index;
      let isEven = even;
      let isOdd = odd;
      let isFirst = first;
      let isLast = last;
    "
></li>
登录后复制
<li *ngFor="let item of list; trackBy: identify"></li>
登录后复制
identify(index, item){
  return item.id; 
}
登录后复制

1.2 自定义指令

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

<div [appHover]="{ bgColor: &#39;skyblue&#39; }">Hello Angular</div>
登录后复制
  • 创建自定义指令

$ 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 内置管道

  • date 日期格式化

  • currency 货币格式化

  • uppercase 转大写

  • lowercase 转小写

  • json 格式化json 数据

<p>{{ date | date: "yyyy-MM-dd" }}</p>
登录后复制

2.2 自定义管道

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

// summary.pipe.ts
import { Pipe, PipeTransform } from &#39;@angular/core&#39;;

@Pipe({
   name: &#39;summary&#39; 
});
export class SummaryPipe implements PipeTransform {
    transform (value: string, limit?: number) {
        if (!value) return null;
        let actualLimit = (limit) ? limit : 10;
        return value.substr(0, actualLimit) + &#39;...&#39;;
    }
}
登录后复制
// app.module.ts
import { SummaryPipe } from &#39;./summary.pipe&#39;
@NgModule({
    declarations: [SummaryPipe] 
});
登录后复制

3. 服务 Service

3.1 创建服务

$ ng g s services/TestService --skip-tests
登录后复制
import { Injectable } from &#39;@angular/core&#39;;

@Injectable({
  providedIn: &#39;root&#39;
})
export class TestService { }
登录后复制
export class AppComponent {
  constructor (private testService: TestService) {}
}
登录后复制

3.2 服务的作用域

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

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

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

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

    import { Component } from &#39;@angular/core&#39;;
    import { CarListService } from &#39;../car-list.service.ts&#39;
    
    @Component({
      selector:    &#39;app-car-list&#39;,
      templateUrl: &#39;./car-list.component.html&#39;,
      providers:  [ CarListService ]
    })
    登录后复制

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

    作者:浅忆_0810

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

    以上是深入浅析Angular中的指令、管道和服务的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

泰拉瑞亚怎么用指令获得物品?-泰拉瑞亚怎么收藏物品? 泰拉瑞亚怎么用指令获得物品?-泰拉瑞亚怎么收藏物品? Mar 19, 2024 am 08:13 AM

泰拉瑞亚怎么用指令获得物品?一、什么是泰拉瑞亚给予物品指令在泰拉瑞亚游戏中,给予物品指令是一项非常实用的功能。通过这个指令,玩家可以直接获取需要的物品,而不必费力地去打怪或者传送到某个地点。这样可以极大地节省时间,提高游戏的效率,让玩家更专注于探索和建设世界。总的来说,这个功能让游戏体验变得更加流畅和愉快。二、如何使用泰拉瑞亚给予物品指令1.打开游戏并进入游戏界面。2.按下键盘上的“Enter”键,打开聊天窗口。3.在聊天窗口中输入指令的格式:“/give[玩家名称][物品ID][物品数量]”。

win10安全中心服务被禁用解决方案 win10安全中心服务被禁用解决方案 Jul 16, 2023 pm 01:17 PM

安全中心服务是win10系统内置的电脑防护作用,能够实时保护电脑安全,可是有些客户在开机的时候碰见了安全中心服务被禁用的状况,怎么办呢?很简单,你可以打开服务面板,找到SecurityCenter项,以后右键打开它的属性窗口,将启动种类设定为自动,以后再点击一下启动就能够再次开启这个服务了。win10安全中心服务被禁用怎么办:1、按“Win+R”开启“运作”窗口。2、随后输入“services.msc”指令后按回车3、随后在右边窗口中找到“SecurityCenter”一项,双击此项开启其属性窗

如何在Ubuntu 24.04上安装Angular 如何在Ubuntu 24.04上安装Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一种可自由访问的JavaScript平台,用于创建动态应用程序。它允许您通过扩展HTML的语法作为模板语言,以快速、清晰地表示应用程序的各个方面。Angular.js提供了一系列工具,可帮助您编写、更新和测试代码。此外,它还提供了许多功能,如路由和表单管理。本指南将讨论在Ubuntu24上安装Angular的方法。首先,您需要安装Node.js。Node.js是一个基于ChromeV8引擎的JavaScript运行环境,可让您在服务器端运行JavaScript代码。要在Ub

如何在 Golang 中使用管道实现文件读写? 如何在 Golang 中使用管道实现文件读写? Jun 04, 2024 am 10:22 AM

通过管道进行文件读写:创建一个管道从文件读取数据并通过管道传递从管道中接收数据并处理将处理后的数据写入文件使用goroutine并发执行这些操作以提高性能

远程桌面连接服务用命令打开方法 远程桌面连接服务用命令打开方法 Dec 31, 2023 am 10:38 AM

远程桌面连接给很多用户的日常生活带来了方便,也有部分想使用命令来进行远程连接,操作起来更方便,那么该怎么连接呢?远程桌面连接服务用命令打开方法可以帮你解决。远程桌面连接命令怎么设置:方法一、通过运行命令远程连接1、按下“Win+R”打开“运行”输入mstsc2、然后点击“显示选项”3、输入ip地址点击“连接”。4、显示正在连接即可。方法二、通过命令提示符远程连接1、按下“Win+R”打开“运行”输入cmd2、在“命令提示符”输入mstsc/v:192.168.1.250/console

启用win7音频服务的方法 启用win7音频服务的方法 Jul 10, 2023 pm 05:13 PM

计算机有许多系统服务来支持各种程序的应用。如果电脑没有声音,在排除硬件问题的情况下,大部分音频服务都没有打开,那么win7如何启用音频服务呢?许多朋友比较模糊,所以针对如何启用win7音频服务的问题,下面小编介绍win7音频服务的启用方法。启用win7音频服务的方法。1.在Windows7系统下的计算机桌面上找到计算机,右键选择管理选项。2.在打开的计算机管理界面中找到并打开服务和应用下的服务项目。在右边的服务界面上找到WindowsAudio双击打开修改。4.切换到常规项目,点击启动开启功能。

Linux 重启服务的正确方式是什么? Linux 重启服务的正确方式是什么? Mar 15, 2024 am 09:09 AM

Linux重启服务的正确方式是什么?在使用Linux系统时,经常会遇到需要重启某个服务的情况,但是有时候我们可能会在重启服务时遇到一些问题,比如服务没有真正停止或启动等情况。因此,掌握正确的重启服务的方式是非常重要的。在Linux中,通常可以使用systemctl命令来管理系统服务。systemctl命令是systemd系统管理器的一部分

Angular组件及其显示属性:了解非block默认值 Angular组件及其显示属性:了解非block默认值 Mar 15, 2024 pm 04:51 PM

Angular框架中组件的默认显示行为不是块级元素。这种设计选择促进了组件样式的封装,并鼓励开发人员有意识地定义每个组件的显示方式。通过显式设置CSS属性 display,Angular组件的显示可以完全控制,从而实现所需的布局和响应能力。

See all articles