Как определить правильный сигнал Angular с помощью effect()?

Сигналы в Angular довольно хороши. Однако я борюсь с обработкой нескольких сигналов. В очень упрощенном примере — сервис ExternalController, который определяет два сигнала controller1 и controller2.

Теперь я хочу вызвать метод, если значение сигнала изменится.

service ExternalController {
    public controller1 = signal(null);
    public controller2 = signal(null);

    constructor() {
        effect(() => {
            if (controller1) do something
            if (controller2) do something else
        })
    }
}

Проблема в том, что effect() срабатывает всякий раз, когда сигнал изменился. Но как узнать, какой сигнал сработал?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
3
0
517
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обратные вызовы эффектов выполняются в реактивном контексте. Это означает, что он способен знать, от какого сигнала он зависит. Если вы вызываете только один сигнал, этот эффект будет вызван только при обновлении указанного сигнала.

Эффект не запускается для обновлений сигналов, которые вызываются вне него.

В вашем случае у вас может быть 2 эффекта:

effect(() => {
   if (controller1()) {
     ...
   }
})

effect(() => {
   if (controller2()) {
     ...
   }
})

Другие вопросы по теме

Похожие вопросы

Установите месяц на основе маршрута для компонента календарного месяца
RxJS Выполнять вызовы API, если достигнут максимальный размер пакета или нет новых входных данных в течение более определенного периода времени, используя subject,bufferSize,takeuntil
Microsoft.AspNetCore.Identity.UserManager может генерировать двухфакторный токен, но SignInManager не может оценить успешную аутентификацию через Angular
Значение URL-адреса источника сценария Santitize angular предоставляет неправильное значение URL-адреса
Ссылка на розетку именованного маршрутизатора Angular не работает
Как отформатировать часовой пояс для компонентов angular-material/datetime-picker?
Заполнение точечной диаграммы увеличивается при наличии данных
Как отключить элемент ввода на основе определенного условия в Angular?
Angular FORM, удаление из DOM не удаляет указанный индекс, но удаляет последний элемент
Ошибка в Transforms.js:17 во время проекта сборки Angular