1.1.9 • Published 1 year ago

ngx-simple-signal v1.1.9

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

ngx-simple-signal

Angular 16+ Signals as get/set accessors. Compatible with component inputs and two-way data binding.

Description

This library provides a SimpleSignal decorator that can be attached to a property. It accepts the same parameters as a regular Signal and turns the property into a get/set accessor pair for the created Signal.

import { SimpleSignal } from "ngx-simple-signal";

@Component({...})
export class MyComponent {
  @SimpleSignal(0) myNumber: number;
}

The result is functionally equivalent to the following code:

@Component({...})
export class MyComponent {
  private _myNumber = signal(0);
  get myNumber(): number {
    return this._myNumber();
  }
  set myNumber(value: number): void {
    this._myNumber.set(value);
  }
}

Usage

Simple Signals can be used in the same context as regular Signals and retain all their reactive properties.

@Component({...})
export class MyComponent {
  @SimpleSignal(0) myNumber: number;
  myNumberSquared = computed(() => this.myNumber ** 2);

  constructor() {
    setInterval(() => this.myNumber++, 1000);
    effect(() => {
      console.log("My number is " + this.myNumber);
      console.log("My number squared is " + this.myNumberSquared());
    });
  }
}

Due to the accessor syntax, Simple Signals can be two-way bound in template-driven forms.

<input [(ngModel)]="myNumber" />

Furthermore, they can also be bound to component inputs and react to their changes.

@Component({...})
export class MyComponent {
  @Input() @SimpleSignal(0) numberInput: number;

  logChanges = effect(() => console.log("Number input changed to " + this.numberInput));
}

To convert a Simple Signal to a regular Signal, you can use the library function fromSimple.

import { SimpleSignal, fromSimple } from "ngx-simple-signal";

@Component({...})
export class MyComponent {
  @SimpleSignal(0) myNumber: number;
  signal = fromSimple(() => this.myNumber);
}
1.1.9

1 year ago

1.1.8

1 year ago

1.1.7

1 year ago

1.1.6

1 year ago

1.1.5

1 year ago

1.1.4

1 year ago

1.1.3

1 year ago

1.1.2

1 year ago

1.1.0

1 year ago

1.0.0

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago