首页前端开发JavaScript深入浅析Angular中的指令、管道和服务

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

时间2024-01-30 09:37:03发布访客分类JavaScript浏览982
导读:收集整理的这篇文章主要介绍了深入浅析Angular中的指令、管道和服务,觉得挺不错的,现在分享给大家,也给大家做个参考。Angular中什么是指令、管道、服务?下面本篇文章带大家了解一下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: '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.tsimport {
 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.tsimport {
 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

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

以上就是深入浅析Angular中的指令、管道和服务的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

Angular指令管道

若转载请注明出处: 深入浅析Angular中的指令、管道和服务
本文地址: https://pptw.com/jishu/592349.html
JavaScript中神奇的this到底是啥? C#中五种访问修饰符作用范围实例详解

游客 回复需填写必要信息