Skip to content

Instantly share code, notes, and snippets.

View jcamilom's full-sized avatar

Camilo Muñoz jcamilom

  • Medellín, Colombia
View GitHub Profile
private subscriptions = new Subscription();
private selectedValues: any[] = [];
ngAfterContentInit(): void {
this.options.forEach(option => {
this.subscriptions.add(
option.valueChanges$.subscribe(
(optionChecked) => {
if (optionChecked) {
this.add(option.value);
@Component({
selector: 'user-check-option',
template: `
<label>
<input type="checkbox" [formControl]="control">
<div class="card">
<div class="avatar">
<img src="assets/images/{{ value.avatar }}">
<div class="span"></div>
</div>
@ContentChildren(SimpleCheckOptionComponent)
options!: QueryList<SimpleCheckOptionComponent>;
abstract class MultiCheckOption { } // (1)
@Component({
selector: 'simple-check-option',
providers: [
{ // (2)
provide: MultiCheckOption,
useExisting: SimpleCheckOptionComponent,
}
]
@ContentChildren(MultiCheckOption)
options!: QueryList<MultiCheckOption>;
export abstract class MultiCheckOption {
abstract value: any;
public control = new FormControl(false);
get valueChanges$(): Observable<boolean> {
return this.control.valueChanges;
}
}
@Component(...)
export class SimpleCheckOptionComponent extends MultiCheckOption {
<multi-check-field formControlName="subjects">
...
</multi-check-field>
import { Component, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
@Component({
selector: 'multi-check-field',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => MultiCheckFieldComponent),
multi: true
writeValue(obj: any): void;
registerOnChange(fn: any): void;
registerOnTouched(fn: any): void;
setDisabledState?(isDisabled: boolean): void;
multiCheckControl = new FormControl(TEST_INITIAL_VALUE);
multiCheckControl.setValue(TEST_VALUE);
multiCheckControl.patchValue(TEST_VALUE);