两种类型,属性型指令,结构型指令。

属性型指令

改变 DOM 元素外观或行为

  1. @Directive({ selector: '[log]' })
  2. export class Log {
  3. constructor(private el: ElementRef, private render: Renderer2) {
  4. }
  5. @HostListener('click')
  6. onClick() {
  7. this.render.setElementStyle(this.el.nativeElement, 'background-color', '#f50');
  8. }
  9. }

结构型指令

改变 DOM 结构的指令,类似 ngIf ngFor

  1. <ng-template [delay]="1000 * i">
  2. <user-detail [user-id]="item.id"></user-detail>
  3. </ng-template>
  4. <div *ngFor="let item of users | async; let i = index">
  5. <user-detail [user-id]="item.id" *delay="1000 * i"></user-detail>
  6. </div>
  1. @Directive({ selector: '[delay]' })
  2. export class Delay {
  3. constructor(private templateRef: TemplateRef<any>,
  4. private viewContainerRef: ViewContainerRef) {}
  5. @Input()
  6. set delay(time: number) {
  7. setTimeout(() => {
  8. this.viewContainerRef.createEmbeddedView(this.templateRef);
  9. }, time);
  10. }
  11. }

参考