ホームページ > ウェブフロントエンド > jsチュートリアル > Angular のディレクティブ、パイプ、サービスの詳細な分析

Angular のディレクティブ、パイプ、サービスの詳細な分析

青灯夜游
リリース: 2021-09-18 10:58:13
転載
2178 人が閲覧しました

Angular の命令、パイプ、サービスとは何ですか?次の記事では、Angular の手順、パイプライン、サービスについて説明します。お役に立てば幸いです。

Angular のディレクティブ、パイプ、サービスの詳細な分析

1. ディレクティブディレクティブ

ディレクティブは、Angular によって提供される操作です。 DOM パス。命令は属性命令と構造命令に分かれます。 [関連チュートリアルの推奨事項: "angular チュートリアル"]

属性の説明: 既存の要素の外観または動作を変更し、[] パッケージを使用します。

構造命令: レイアウトを変更するには、DOM ノードを追加および削除します。命令プレフィックスとして # を使用します。

#1.1 ビルド済み-in 命令

1.1.1 *ngIf

条件に基づいたレンダリングDOM ノードまたは削除 DOM Node

<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

    データ<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:html;toolbar:false;">&lt;p&gt;{{ date | date: &quot;yyyy-MM-dd&quot; }}&lt;/p&gt;</pre><div class="contentsignin">ログイン後にコピー</div></div>

  • 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

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

  • 著者: Qianyi_0810


    プログラミング関連の知識については、こちらをご覧ください。 :

    プログラミングビデオ

    ! !

    以上がAngular のディレクティブ、パイプ、サービスの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:掘金--浅忆_0810
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート