Dzhavat Ushev 's Avatar

Dzhavat Ushev

@dzhavat

Developer working with Angular Blog at https://dzhavat.github.io/

360
Followers
157
Following
158
Posts
02.11.2024
Joined
Posts Following

Latest posts by Dzhavat Ushev @dzhavat

Preview
Goodbye innerHTML, Hello setHTML: Stronger XSS Protection in Firefox 148 – Mozilla Hacks - the Web developer blog Cross-site scripting (XSS) remains one of the most prevalent vulnerabilities on the web. The new standardized Sanitizer API provides a straightforward way for web developers to sanitize untrusted…

The Sanitizer API landed in Firefox 148, along with element.setHTML().

This lets you fully configure how HTML strings are cleaned as they're parsed.

hacks.mozilla.org/2026/02/good...

24.02.2026 14:18 👍 203 🔁 58 💬 1 📌 14

Interesting. It seems like there's a selector for everything but the `state`, thought it can probably be created as well.
An issue we had with the `state` is that it *must* be passed for every navigation, otherwise it's deleted by the Router. Kind of annoying.

01.02.2026 15:10 👍 0 🔁 0 💬 0 📌 0

We also tried with a custom LocationStrategy. In that case the `id` is saved in the `history.state` upon navigation.
It works but it affects every route in the app, not just the `/books` sub-tree. Maybe it can be modified further to only "affect" a specific route.

01.02.2026 14:59 👍 0 🔁 0 💬 0 📌 0

It's a client requirement because of GDPR. In the example I mention `book-id` but in the projects it's another `id` which is more sensitive. So it must not be part of the URL (and the browser's history).

01.02.2026 14:25 👍 1 🔁 0 💬 1 📌 0
Post image

Hey @angular.dev I need your help. 🙏
I have the following URL structure and want to remove <book-id> from it BUT keep the "deep-links" - I should still be able to access `/book/<book-id>` without exposing the `<book-id>` in the URL. Do you have any suggestion?
#angular

29.01.2026 20:01 👍 2 🔁 2 💬 3 📌 0
Preview
a group of minions are celebrating with the words hooray ALT: a group of minions are celebrating with the words hooray

Watt-ify everything 😃

29.01.2026 21:05 👍 1 🔁 0 💬 0 📌 0

The refresh part is a requirement too, sadly.
We looked at `state` too but couldn't solve the major use-cases (e.g. sub-route navigation, refresh, etc) without throwing some `sessionStorage` in. So it kind of diminishes its purpose.

29.01.2026 21:03 👍 1 🔁 0 💬 1 📌 0

What we have until now is using `sessionStorage` or creating a custom `LocationStrategy`. What else can be used?

29.01.2026 20:01 👍 0 🔁 0 💬 0 📌 0
Post image

Hey @angular.dev I need your help. 🙏
I have the following URL structure and want to remove <book-id> from it BUT keep the "deep-links" - I should still be able to access `/book/<book-id>` without exposing the `<book-id>` in the URL. Do you have any suggestion?
#angular

29.01.2026 20:01 👍 2 🔁 2 💬 3 📌 0

Congrats 🎉. Thanks for all your work on Angular. All the best in the future.

29.01.2026 16:44 👍 1 🔁 0 💬 0 📌 0

Wow, wow, wow 🎉🚀

28.01.2026 16:15 👍 1 🔁 0 💬 0 📌 0
Preview
Accessibility For Everyone by Laura Kalbag Read the book online for free.

My book, Accessibility For Everyone, is now free and online as a website.

accessibilityforeveryone.site

The book was first published by A Book Apart in 2017 but it holds up! It covers web accessibility for designers, developers, content folks, and really everyone who works in tech.

27.01.2026 13:14 👍 308 🔁 194 💬 9 📌 10
Headline: Developer Tool State Management Visualization

Main Container: A dark-mode interface showing a logic flow. A central resource block titled myRsrc is highlighted with a gold border.

Internal Flow: Inside the resource, an extRequest node (red) feeds into loadEffect (purple), state (red), and stream (blue). These converge into green terminal nodes: status (showing "resolved"), value (showing "next_val"), and isLoading (showing "false").

External Context: Above the resource is a parent node rsrcParam with the string "rsrc_param". To the left, unrelated nodes for zippy and counter are visible.

Inspector Window: A small UI overlay in the bottom right summarizes the "myRsrc" state, confirming the type is resource, the status is resolved, and the current value is "next_val".

Headline: Developer Tool State Management Visualization Main Container: A dark-mode interface showing a logic flow. A central resource block titled myRsrc is highlighted with a gold border. Internal Flow: Inside the resource, an extRequest node (red) feeds into loadEffect (purple), state (red), and stream (blue). These converge into green terminal nodes: status (showing "resolved"), value (showing "next_val"), and isLoading (showing "false"). External Context: Above the resource is a parent node rsrcParam with the string "rsrc_param". To the left, unrelated nodes for zippy and counter are visible. Inspector Window: A small UI overlay in the bottom right summarizes the "myRsrc" state, confirming the type is resource, the status is resolved, and the current value is "next_val".

Debugging just got a major upgrade. We’ve officially launched Resource Visualization in Angular DevTools. Now you can gain even deeper insights into your app's lifecycle and dependencies directly in your browser.

See it in action and check out the details here: github.com/angular/angu...

26.01.2026 17:00 👍 14 🔁 5 💬 0 📌 0
A code snippet demonstrating the use of the JavaScript spread operator within Angular's @let syntax. The code defines a baseModel object, then creates an upgradedModel using {...baseModel} to inherit properties like make, model, and year, while adding a new "radio" property. The HTML below outputs both lists to show the merged data.

Code snippet:
      @let baseModel = { make: 'Best Cars', model: 'ng-21', year: 2026 };
      @let upgradedModel = {...baseModel, radio: 'Premium Sound System' };

      <p>Base Model Details:</p>
      <ul>
        <li>Make: {{ baseModel.make }}</li>
        <li>Model: {{ baseModel.model }}</li>
        <li>Year: {{ baseModel.year }}</li>
      </ul>

      <p>Upgraded Model Details:</p>
      <ul>
        <li>Make: {{ upgradedModel.make }}</li>
        <li>Model: {{ upgradedModel.model }}</li>
        <li>Year: {{ upgradedModel.year }}</li>
        <li>Radio: {{ upgradedModel.radio }}</li>
      </ul>

A code snippet demonstrating the use of the JavaScript spread operator within Angular's @let syntax. The code defines a baseModel object, then creates an upgradedModel using {...baseModel} to inherit properties like make, model, and year, while adding a new "radio" property. The HTML below outputs both lists to show the merged data. Code snippet: @let baseModel = { make: 'Best Cars', model: 'ng-21', year: 2026 }; @let upgradedModel = {...baseModel, radio: 'Premium Sound System' }; <p>Base Model Details:</p> <ul> <li>Make: {{ baseModel.make }}</li> <li>Model: {{ baseModel.model }}</li> <li>Year: {{ baseModel.year }}</li> </ul> <p>Upgraded Model Details:</p> <ul> <li>Make: {{ upgradedModel.make }}</li> <li>Model: {{ upgradedModel.model }}</li> <li>Year: {{ upgradedModel.year }}</li> <li>Radio: {{ upgradedModel.radio }}</li> </ul>

Spread syntax in Angular templates! Use the ... operator in:

▶️ Object literals: {a: 1, ...foo}
▶️ Array literals: [1, ...foo]
▶️ Function calls: fn(1, ...foo)

It’s powered by Angular’s "pure function" system, ensuring objects aren't re-created unless data changes. Keep it clean, keep it fast! 🚀

22.01.2026 17:00 👍 15 🔁 4 💬 0 📌 0

Angular 21.1 is officially here! 🚀
This update brings: ✅ Multi-case @switch matching ✅ Spread syntax in templates ✅ isActive() Signals for routing ✅ Updated [formField] for Signal Forms

Upgrade now: ng update @angular/core @angular/cli and tell us your favorite new feature! 🛠️

21.01.2026 18:00 👍 14 🔁 2 💬 1 📌 1

So you're saying:
1. Master the "Rules"
("You know the rules and so do I.")
2. High-Intent Focus
("A full commitment's what I'm thinking of.")
3. Transparency & Reporting
("I just wanna tell you how I'm feeling / Gotta make you understand.")

... and many more 😂😂

21.01.2026 17:35 👍 0 🔁 0 💬 0 📌 0
Post image

🚀 What's new in #Angular v21.1? ✨

✅ ... spread operator in templates
🚦 trailing slash router config
✨ Experimental Navigation API
🚀 Signal Forms renaming and new features

Our detailed blog post is live 👉 blog.ninja-squad.com/2026/01/15/w...

15.01.2026 13:48 👍 10 🔁 7 💬 0 📌 0
Video thumbnail

The Navigation API is newly baseline! The web now has sensible, low-level routing for navigations.

15.01.2026 15:25 👍 164 🔁 29 💬 9 📌 5
Video thumbnail

CSS anchor positioning is newly baseline! This opens the door for lots of new creative CSS.

It's a huge feature, but here are the basics.

13.01.2026 16:09 👍 210 🔁 39 💬 9 📌 11
Preview
Firefox 147 release notes for developers (Beta) - Mozilla | MDN This article provides information about the changes in Firefox 147 that affect developers. Firefox 147 is the current Beta version of Firefox and ships on January 13, 2026.

Firefox 147 just landed & it's pretty huge in terms of web features:

🎉 CSS anchor positioning
🎉 The navigation API
🎉 View transition types
🎉 Brotli support in Compression/DecompressionStream
🎉 CSS module imports

And more!

https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/147

13.01.2026 14:03 👍 334 🔁 65 💬 9 📌 22

dzhavat.github.io/feed.xml

07.01.2026 12:52 👍 0 🔁 0 💬 0 📌 0

I wish you all the best. Hopefully 45 days will not feel that long.

01.01.2026 14:52 👍 1 🔁 0 💬 0 📌 0
Post image

Happy new year! 🎉
Let's start the year with a short run 🏃‍♂️
Progress is made in small steps 😊

01.01.2026 10:36 👍 4 🔁 0 💬 1 📌 0
Preview
Announcing NgRx 21: Celebrating a 10 Year Journey with a fresh new look and @ngrx/signals/events Announcing NgRx 21: Celebrating a 10 Year Journey with a fresh new look and @ngrx/signals/events

📢 Announcing NgRx 21: Celebrating a 10 Year Journey with a fresh new look and ngrx/signals/events

🎊 10 Year Anniversary
🎨 New Documentation Website
⚓ Stable Events Plugin

And more!

✍️ by @timdeschryver.dev

dev.to/ngrx/announc...

22.12.2025 16:38 👍 14 🔁 8 💬 0 📌 3

Latest status 😃 It was a config issue. After upgrading Vitest to latest I still got the errors. But then removed a suspicious config setting... and it works now :)

17.12.2025 21:06 👍 2 🔁 0 💬 1 📌 0
Video thumbnail

HTML invoker commands are newly baseline! Here's how they work…

17.12.2025 15:58 👍 147 🔁 27 💬 6 📌 5

So far everything works in the ATL repo. I guess I'll first need to upgrade my project to later versions of dependencies. Am still on Angular v20 and Vitest v2 😬 Upgrade might fix it.

16.12.2025 21:53 👍 1 🔁 0 💬 1 📌 0

Will try to make a repro. Though the current example apps in the repo are based on Jest/Karma. My issue occurs in Vitest. Will probably need to use the current PR as a playground :)

16.12.2025 20:41 👍 0 🔁 0 💬 1 📌 0

Hey @timdeschryver.dev Do you happen to have an ATL example of a spec that tests a component that uses an `effect`? I get some error saying that required input is not defined 🤔

16.12.2025 17:34 👍 0 🔁 0 💬 1 📌 0

Just updated our project to @nx.dev v22.2.x. Now eagerly waiting for 22.3.x and support for Angular v21 🎉

Nx singlehandedly updated Storybook to v10.1, added Vitest configs, and updated a bunch of related deps. Impressive! 🚀

16.12.2025 14:35 👍 1 🔁 0 💬 0 📌 0