我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何理解Angular中的指令和管道以及服务

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何理解Angular中的指令和管道以及服务

这篇文章将为大家详细讲解有关如何理解Angular中的指令和管道以及服务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1. 指令 Directive

指令是 Angular 提供的操作 DOM 的途径。指令分为属性指令和结构指令。

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

结构指令:增加、删除 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: 'skyblue' }">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 '@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 ]
    })


关于如何理解Angular中的指令和管道以及服务就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何理解Angular中的指令和管道以及服务

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何理解HTML开发中.html和.htm和.shtml以及.shtm的区别与联系

如何理解HTML开发中.html和.htm和.shtml以及.shtm的区别与联系,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。大家都知道,我们每天浏览的网页或者网站或者w
2023-06-08

SUSE系统中如何实现多台服务器的集中管理和监控

在SUSE系统中,可以使用SUSE Manager来实现多台服务器的集中管理和监控。SUSE Manager是一个企业级的基础设施管理工具,可以帮助管理员轻松地管理和监控大型的服务器环境。使用SUSE Manager,管理员可以集中管理所
SUSE系统中如何实现多台服务器的集中管理和监控
2024-04-09

阿里云服务器控制中心如何管理和监控你的云服务器

阿里云服务器控制中心是一款强大而便捷的云服务器管理工具,它可以帮助你轻松地管理和监控你的云服务器。本文将详细讲解如何使用阿里云服务器控制中心。正文:阿里云服务器控制中心是阿里云推出的一款云服务器管理工具,它可以帮助你轻松地管理和监控你的云服务器。以下是使用阿里云服务器控制中心的步骤:登录阿里云服务器控制中心:首先
阿里云服务器控制中心如何管理和监控你的云服务器
2023-12-16

阿里云服务器配置详解如何创建和管理您的主页

在互联网时代,一个拥有自己的主页的网站是至关重要的。而阿里云服务器正是您实现这个目标的最佳选择。本文将详细解释如何配置阿里云服务器以创建和管理您的主页。一、了解阿里云服务器阿里云服务器是一种基于云计算技术的虚拟化服务器,它具有高效、灵活、安全的特点,能够帮助您轻松构建和管理自己的网站。二、创建阿里云服务器登录阿里
阿里云服务器配置详解如何创建和管理您的主页
2023-11-10

在Go语言中如何解决并发网络请求的请求服务降级和异常处理问题?

在Go语言中如何解决并发网络请求的请求服务降级和异常处理问题?随着互联网的快速发展,越来越多的应用需要进行并发网络请求。然而,在高并发的情况下,网络请求可能会导致超时、阻塞等问题,从而影响到整个系统的稳定性和可靠性。面对这个问题,我们可以使
2023-10-22

编程热搜

目录