ホームページ >ウェブフロントエンド >jsチュートリアル >Angular でカスタム命令を作成する方法の詳細な説明
この記事では、Angular で命令の作成をカスタマイズする方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
angular チュートリアル "]
@Directive デコレータを備えたコントローラー クラスが必要です。このデコレータは、ディレクティブに関連付けられた属性名を識別するセレクタ名を指定します。コントローラー クラスは、ディレクティブの機能的な動作を実装します。
import { Directive, HostListener, ElementRef, Renderer2, HostBinding } from '@angular/core'; @Directive({ selector: '[appBackgroundExe]' }) export class BackgroundExeDirective { @Input('appBackgroundExe') highLightColor: string; constructor(private elementRef: ElementRef, private renderer: Renderer2) { // 这种写法比较丑陋 // this.elementRef.nativeElement.style.background = 'yellow'; // 推荐这种写法, Renderer this.renderer.setStyle(this.elementRef.nativeElement, 'background', 'yellow'); } @HostBinding('class.pressed') isPressed: boolean; @HostListener('mouseenter') onMouseEnter(): void { this.highLight(this.highLightColor); } @HostListener('mouseleave') onMouseLeave(): void { this.highLight(null); } @HostListener('mousedown') onMouseDown(): void { this.isPressed = true; } @HostListener('mouseup') onMouseUp(): void { this.isPressed = false; } private highLight(color: string): void { // this.elementRef.nativeElement.style.background = color; this.renderer.setStyle(this.elementRef.nativeElement, 'background', color); } }その中の
selector: '[appBackgroundExe]' コンパイル時に Angular がこのディレクティブに関連付けられた HTML コードをテンプレートから見つけることができるように、ディレクティブに関連付けられた属性名です。
ElementRef モジュールと
Renderer2 モジュールのインスタンスが挿入されます。
ElementRef を通じて、命令によって識別される DOM 要素を参照し、その要素に対して関連する操作を実行できます。また、
Renderer2 によって提供される API を使用して、要素に対して関連するレンダリング操作を実行できます。
@HostListener と
@HostBinding はプロパティ デコレータです。
@HostListener は、ホスト要素をリッスンするイベントを追加するために使用され、命令によってマークされた要素がホスト要素です。
@HostBinding は、ホスト要素の属性値を動的に設定するために使用されます。
フォント スタイルの設定
.pressed { font-size: 30px; }
テンプレートでディレクティブを使用する
<div class="panel panel-primary"> <div [appBackgroundExe]="'red'">鼠标移进,元素变成红色。鼠标移出,元素红色消失</div> </div>
命令の実装
import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core'; @Directive({ selector: '[appIf]' }) export class IfDirective { constructor( private templateRef: TemplateRef<any>, private viewContainerRef: ViewContainerRef ) { } @Input('ifCreat') set condition(condition: boolean) { if (condition) { this.viewContainerRef.createEmbeddedView(this.templateRef); } else { this.viewContainerRef.clear(); } } }このうち、
TemplateRef は、埋め込みビューを作成できる埋め込みテンプレート テンプレート要素を表します。
ViewContainerRef は、1 つ以上のビューを追加できるビュー コンテナを表します。これを通じて、
TemplateRef インスタンスに基づくインライン ビューまたはコンポーネント ビューを作成および管理できます。
テンプレートでのディレクティブの使用
<div class="panel panel-primary"> <div *ifCreate="'true'">hello</div> </div>
プログラミング教育をご覧ください。 !
以上がAngular でカスタム命令を作成する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。