属性型指令
改变 DOM 元素外观或行为
@Directive({ selector: '[log]' })export class Log {constructor(private el: ElementRef, private render: Renderer2) {}@HostListener('click')onClick() {this.render.setElementStyle(this.el.nativeElement, 'background-color', '#f50');}}
结构型指令
改变 DOM 结构的指令,类似 ngIf ngFor
<ng-template [delay]="1000 * i"><user-detail [user-id]="item.id"></user-detail></ng-template><div *ngFor="let item of users | async; let i = index"><user-detail [user-id]="item.id" *delay="1000 * i"></user-detail></div>
@Directive({ selector: '[delay]' })export class Delay {constructor(private templateRef: TemplateRef<any>,private viewContainerRef: ViewContainerRef) {}@Input()set delay(time: number) {setTimeout(() => {this.viewContainerRef.createEmbeddedView(this.templateRef);}, time);}}
