Angular Directive - Tuong-Nguyen/Angular-D3-Cometd GitHub Wiki

  • Attach behavior to DOM elements.
  • Multiple directives can be applied to the same element.

CSS Selector

Specify which elements the directive is applied.

  • Element: footer
  • Class: .alert
  • Attribute: [color]
  • Attribute with specific value: [color=red]
  • Combination of the above: footer[color=red] - [color],footer.alert - footer:not(.alert)

Note: CCS selector like descendants, siblings, ids, wildcards and pseudos (rather than :not) are not supported. Note: Do not start attribute selector with bind-, on-, let-, ref-.

Data Binding

Input

  • property:binding - property: Directive property. - binding: DOM property.
@Directive({
  selector: '[loggable]',
  inputs: ['text: logText']
})

export class SimpleTextDirective {
}

Text property is automatically created for SimpleTextDirective.

  • For receiving change notification, we can add property setter
export class SimpleTextDirective {
  set text(value) {
    console.log(value);
  }
}
  • Use @Input decorator:
@Directive({
  selector: '[loggable]'
})
export class InputDecoratorDirective {
  // text: logText
  @Input('logText') text: string;
  

  // text: text with setter
  @Input('text')
  set text(value) {
  }

  // textValue: textValue with setter
  @Input()
  set textValue(value) {
  }
}
  • Note: Input is the way for Parent pass data to Child

Output

Notify Parent from Child

  • Declare @Output decorator
  • Create an EventEmmiter
  • Emit an event
@Component({
  selector: 'ns-pony',
  // the method `selectPony()` will be called on click
  template: `<div (click)="selectPony()">{{ pony.name }}</div>`
})

export class SelectablePonyComponent {
  @Input() pony: Pony;
  // we declare the custom event as an output,
  // the EventEmitter is used to emit the event
  @Output() ponySelected = new EventEmitter<Pony>();
  /**
  * Selects a pony when the component is clicked.
  * Emits a custom event.
  */
  selectPony() {
    this.ponySelected.emit(this.pony);
  }
}

Life cycle

  • ngOnChanges: called for each bound property change. (OnChanges)
  • ngOnInit: called only once after first change. (OnInit)
  • ngOnDestroy: called when component is removed. (OnDestroy)
⚠️ **GitHub.com Fallback** ⚠️