i-adnanali.hashnode.devPart 8: Advanced Signal Patterns — The Performance Traps Nobody Warns You AboutLet's be honest: I thought I understood signals after learning computed() and effect(). I was using them. They were working. My components were cleaner. Life was good. Then I built a search filter that lagged noticeably — and made me wonder if I'd ac...Jan 31·6 min read
i-adnanali.hashnode.devPart 7: rxResource() — When Native Features Validate Your ArchitectureA few years ago, some very smart developers on my team solved a problem Angular hadn't addressed yet: how do you handle async state cleanly across an enterprise application? Their answer was elegant. A ResponseService that wraps any observable into a...Jan 21·7 min read
i-adnanali.hashnode.devPart 6: linkedSignal() — The Cascade That Finally Made SenseLet's be honest — I've written allowSignalWrites: true more times than I'd like to admit. Every time, it felt like a hack. Every time, I told myself I'd come back and fix it properly. Then last week, I actually did come back. There it was — code I de...Jan 7·5 min read
i-adnanali.hashnode.devPart 5: Putting It All Together — The Counter DashboardFew weeks ago, I couldn't explain why I'd choose a signal over a BehaviorSubject. Today, I just built an entire component without a single subscribe(), takeUntil(), or ngOnDestroy(). No Subjects. No lifecycle hook juggling. Just signals, computed val...Jan 6·5 min read
i-adnanali.hashnode.devPart 4: input(), output(), model() — The Day I Mass-Deleted ReplaySubjectI need to show you something embarrassing. This is a pattern I've written in almost every component that needed reactive inputs: private metricInSubject = new ReplaySubject<DashboardMetricWithVisualization>(1); @Input() set dashboardMetricWithVisuali...Jan 5·6 min read