Create an Angular Signal Effect

Tomasz Ducin
InstructorTomasz Ducin
Share this video with your friends

Social Share Links

Send Tweet

The effect function in Angular runs a callback when a signal value it depends on changes. The callback is also invoked when the component first renders.

An effect can depend on multiple signals or computed signals. When any of these signals change, the effect callback executes.

Instead of running effect in the constructor, it's best to assign it to a component property. This allows for manual interaction with the EffectRef if needed.

[00:00] Run the effect function, which we first need to import from Angular core. Effect accepts a callback function which is going to be invoked whenever a signal value changes, a signal that this effect depends on. In our case, we're going to simply console log the current value of [00:20] the item signal. Of course, the signal function needs to be called so that the current value of the signal is being retrieved and passed down to the console log. When we save the file and the application renders and the component is getting displayed for the first time, we can see that the effect [00:40] has been executed initially. Now whenever the value of the signal changes, it will propagate the notification to the effect which is going to rerun. So let's create a new element that we would add. We can see that the signal is displaying the 4 new elements or when [01:00] we clear the list of the items, we can see that an empty array has been displayed. An effect could depend on multiple signals or computed signals. So for this reason, we would create one more signal with some initial value, and we would run the [01:19] signal function so that whenever any of these signals change, the effect would be executed. We can see that when the components gets initially displayed, the effect callback gets executed once. And when we change a value of any of the signals, in this case, we're [01:39] clearing the items, we can see that the effect callback has been executed once again. One important thing to note is that an effect returns an effect ref. In case we would need to manually interact with the effect ref, it's a good practice not to run the effect within the constructor, but [01:59] rather create a property and assign the effect to the property. So we would create console log effect and assign the effect to the property.