File

projects/rebirth-ng/src/lib/radio-group/radio-group.component.ts

Implements

ControlValueAccessor

Metadata

changeDetection ChangeDetectionStrategy.OnPush
exportAs radioGroup
host {
}
providers { : , : (() => ), : true }
selector re-radio-group
styleUrls radio-group.component.scss
templateUrl ./radio-group.component.html

Index

Properties
Methods
Inputs
Outputs

Constructor

constructor(rebirthNGConfig: RebirthNGConfig, changeDetectorRef: ChangeDetectorRef)
Parameters :
Name Type Optional
rebirthNGConfig RebirthNGConfig no
changeDetectorRef ChangeDetectorRef no

Inputs

cssClass

Type: string

disabled

Default value: false

disabledItems

Type: any[]

formatter

Type: function

inline

Type: boolean

options

Type: any[]

valueParser

Type: function

Outputs

valueChange $event type: EventEmitter

Methods

isChecked
isChecked(item: any)
Parameters :
Name Type Optional
item any no
Returns : boolean
isDisabled
isDisabled(item: )
Parameters :
Name Optional
item no
Returns : any
onRadioChange
onRadioChange(item: any)
Parameters :
Name Type Optional
item any no
Returns : void
registerOnChange
registerOnChange(fn: any)
Parameters :
Name Type Optional
fn any no
Returns : void
registerOnTouched
registerOnTouched(fn: any)
Parameters :
Name Type Optional
fn any no
Returns : void
setDisabledState
setDisabledState(isDisabled: boolean)
Parameters :
Name Type Optional
isDisabled boolean no
Returns : void
writeValue
writeValue(obj: any)
Parameters :
Name Type Optional
obj any no
Returns : void

Properties

name
name: string
Type : string
Static NAME_SEED
NAME_SEED: number
Type : number
Default value : 0
Private onChange
onChange:
Default value : (_: any) => null
Private onTouched
onTouched:
Default value : () => null
value
value: any
Type : any
import {
  Component, ChangeDetectionStrategy, forwardRef, Input, ChangeDetectorRef, EventEmitter,
  Output
} from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
import { RebirthNGConfig } from '../rebirth-ng.config';

@Component({
  selector: 're-radio-group',
  templateUrl: './radio-group.component.html',
  styleUrls: ['./radio-group.component.scss'],
  changeDetection: ChangeDetectionStrategy.OnPush,
  host: { '[class]': 'cssClass' },
  exportAs: 'radioGroup',
  providers: [{
    provide: NG_VALUE_ACCESSOR,
    useExisting: forwardRef(() => RadioGroupComponent),
    multi: true
  }]
})
export class RadioGroupComponent implements ControlValueAccessor {
  static NAME_SEED = 0;
  @Input() disabled = false;
  @Input() options: any[];
  @Input() inline: boolean;
  @Input() disabledItems: any[];
  @Input() cssClass: string;
  @Input() formatter: (item: any) => string;
  @Input() valueParser: (item: any) => any;
  @Output() valueChange = new EventEmitter<any>();
  name: string;
  value: any;
  private onChange = (_: any) => null;
  private onTouched = () => null;

  constructor(rebirthNGConfig: RebirthNGConfig, private changeDetectorRef: ChangeDetectorRef) {
    this.formatter = rebirthNGConfig.radioGroup.formatter;
    this.valueParser = rebirthNGConfig.radioGroup.valueParser;
    this.name = `rebirth-radio-group-${RadioGroupComponent.NAME_SEED++}`;
  }

  writeValue(obj: any): void {
    this.value = obj;
    this.changeDetectorRef.markForCheck();
  }

  registerOnChange(fn: any): void {
    this.onChange = fn;
  }

  registerOnTouched(fn: any): void {
    this.onTouched = fn;
  }

  setDisabledState(isDisabled: boolean): void {
    this.disabled = isDisabled;
  }

  onRadioChange(item: any) {
    this.onTouched();
    this.value = this.valueParser(item);
    this.onChange(this.value);
    this.valueChange.emit(this.value);
  }

  isChecked(item: any) {
    return this.value === this.valueParser(item);
  }

  isDisabled(item) {
    return this.disabled || (this.disabledItems || []).some(it => this.valueParser(item) === it);
  }

}
<div [ngClass]="{'radio-inline': inline, 'radio': !inline}" *ngFor="let item of options">
  <label>
    <input type="radio" [name]="name" [value]="valueParser(item)" [checked]="isChecked(item)" [disabled]="isDisabled(item)"
           (change)="onRadioChange(item)">{{formatter(item)}}
  </label>
</div>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""