Angular 22.3 prerelease ·
Angular 22.3 adds ++ and -- to template event bindings
Angular 22.3 lets event bindings use count++ and --count like JavaScript. What works in the 22.3 prereleases, what still errors, and why signals need update().
Angular 22.3 adds the ++ and -- operators to template expressions, so an event binding can say (click)="count++" instead of (click)="count = count + 1". The change first shipped in 22.3.0-next.0 on 30 September. For now it is only in the prereleases: the latest stable release is 22.2.3, and the release schedule puts 22.3 at around November 2026.
What works
Prefix and postfix forms both work on anything an event binding could already assign to: a component field, a property such as order.quantity, or an array item such as votes[i]. They behave like JavaScript. Postfix returns the value from before the update, prefix the value after, and precedence follows JavaScript too, so a+++b means (a++) + b.
<button (click)="count++">Add one</button>
<button (click)="order.quantity--">Remove one</button>
<button (click)="votes[i]++">Vote</button>They are still updates, so the rule for = applies to them as well: only event bindings may use them. {{ count++ }} or [title]="count++" fails with "Bindings cannot contain assignments", unless the update sits inside an arrow function.
What still errors
The target has to be a field, a property or an array item. Safe navigation is rejected: user?.visits++ gives "The '?.' operator cannot be used in the assignment". Calls and literals are rejected as well, template variables stay read-only, and writing to a @let declaration is a type-check error.
Signals still use update()
This doesn't change how signals are written, because a signal is a function, not a number. With readonly count = signal(0), the binding (click)="count++" fails type-checking with "Cannot assign to 'count' because it is a read-only property", and count()++ doesn't parse. Keep count.update(c => c + 1) for signals; ++ is for plain fields.
A gotcha while you are on 22.2
In 22.2.3, (click)="count++" is a parse error, but (click)="++count" compiles without one. The parser reads it as two unary plus signs, and the generated code is + +ctx.count, which changes nothing. If a button seems to do nothing, look for a prefix ++ or -- in its binding.
One more check before you use it: a comment in Angular's own tests says Prettier did not handle the new syntax when the feature was written, so make sure your formatter accepts it first.
Sources
- Angular v22.3.0-next.0 release notes
- Template expression syntax (next.angular.dev)
- Angular release schedule
I post short notes like this on LinkedIn.
Need help with this?
![Two panels: in Angular 22.2 and earlier, (click)="count++" is a parse error and you write count = count + 1; in the 22.3 prerelease, count++, --obj.count and items[i]++ work with JavaScript precedence. Below, a template where a plain field uses count++ and a signal still uses update().](/images/notes/angular-22-3-increment-decrement-operators-540.webp)