首頁 > web前端 > js教程 > 深入淺析Angular中的指令、管道和服務

深入淺析Angular中的指令、管道和服務

青灯夜游
發布: 2021-09-18 10:58:13
轉載
2183 人瀏覽過

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中文網其他相關文章!

相關標籤:
來源:掘金--浅忆_0810
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板