PassFront
  1. PassFront
  2. База знаний
  3. Signals и RxJS

Что такое сигналы (Signals) в Angular?

Signals и RxJS

Signal — реактивная обёртка над значением, которая уведомляет потребителей об изменении. Angular использует сигналы для точечного обновления интерфейса без лишних проверок всего дерева.

Основные примитивы

import { signal, computed, effect } from '@angular/core';

const count = signal(0);                 // записываемый сигнал
const double = computed(() => count() * 2); // производное значение

count.set(5);
count.update(v => v + 1);                 // 6
console.log(double());                    // 12

effect(() => console.log('count =', count())); // только в injection context (конструктор/поле компонента или сервиса)
  • signal() — читается вызовом count(), пишется set и update.
  • computed() — вычисляется лениво и кешируется, пересчитывается только при изменении зависимостей.
  • effect() — побочный эффект, который запускается при изменении прочитанных сигналов.

В компонентах

@Component({
  template: `<button (click)="inc()">{{ count() }}</button>`,
})
export class CounterComponent {
  count = signal(0);
  inc() { this.count.update(v => v + 1); }
}

Шаблон автоматически узнаёт, что зависит от сигнала, и обновляет только эту часть.

Сигнальные API компонентов

input(), output(), model(), viewChild(), contentChild() — сигнальные аналоги декораторов @Input, @Output, @ViewChild.

Что дают сигналы

  • Точечное обновление вместо проверки всего дерева (основа zoneless-режима).
  • Простая модель: значение читается и обновляется явно, без подписок и отписок.
  • Автоматическое отслеживание зависимостей в computed и effect.

Сигналы и RxJS

Сигналы хороши для синхронного состояния интерфейса, RxJS — для потоков событий во времени (запросы, дебаунс, комбинирование). Они совместимы: toSignal(observable$) и toObservable(signal).

Коротко для собеседования

Signal хранит значение и уведомляет зависимых: signal для состояния, computed для производных значений, effect для побочных действий. Позволяют Angular обновлять только изменившиеся части шаблона и работают рядом с RxJS.

Другие вопросы раздела