Day 17 - I built a full Angular frontend that talks to yesterday's NestJS API 🚀TechFromZero Series - AngularFromZero 🌐 Try it live: https://lnkd.in/dKhYyvDp This isn't a Hello World. It's a real component architecture: 📐 Search Form → HttpClient → API Key Interceptor → Proxy → NestJS API → OMDB 🔗 The full code (with step-by-step commits you can follow): https://lnkd.in/d3ZEWQ_B 🧱 What I built (step by step): 1️⃣ Angular 21 project scaffold with standalone components — no NgModules 2️⃣ Environment config + dev proxy to avoid CORS with the backend 3️⃣ TypeScript interfaces mirroring the NestJS API exactly 4️⃣ MovieService with HttpClient + functional API key interceptor 5️⃣ FavoritesService with Angular signals for reactive state 6️⃣ Navbar with RouterLink, active highlighting, and favorites count badge 7️⃣ Search page with movie cards, loading spinner, and error handling 8️⃣ Reusable pagination component (dumb component pattern) 9️⃣ Movie detail page with rating bars (IMDB/RT/Metacritic) and favorites toggle 🔟 Favorites page with notes, remove, and empty state 1️⃣1️⃣ Dark theme with CSS custom properties and amber accent 1️⃣2️⃣ README + Vercel deployment for SPA routing 💡 Every file has detailed comments explaining WHY, not just what. Written for any beginner who wants to learn Angular by reading real code — with full clarity on each step. 👉 If you're a beginner learning Angular, clone it and read the commits one by one. Each commit = one concept. Each file = one lesson. Built from scratch, so nothing is hidden. 🌐 See all days: https://lnkd.in/dhDN6Z3F 🔥 This is Day 17 of a 50-day series. A new technology every day. Follow along! #TechFromZero #Day17 #Angular #LearnByDoing #OpenSource #BeginnerGuide #100DaysOfCode #CodingFromScratch
Angular Frontend Built with NestJS API and HttpClient
More Relevant Posts
-
From Angular Basics to Modern Angular — My Learning Journey: Over the past few weeks, I went deep into modern Angular (v16+) and completely changed how I think about frontend development. Here are some of the biggest upgrades in my approach - 1. Signals = Game Changer I moved from traditional state handling to signals for reactive UI. ✔ No unnecessary re-renders ✔ No heavy change detection ✔ Clean, predictable state count = signal(0); 2. Goodbye Boilerplate, Hello Simplicity Using: Standalone Components Functional Interceptors inject() instead of constructor Angular feels much cleaner now. 3. RxJS Done Right (switchMap ) Learned how to handle APIs properly: ✔ Cancel previous requests ✔ Avoid race conditions ✔ Handle errors gracefully switchMap(() => this.http.get('/api')) 4. Signals + API = Powerful Combo Built a pagination feature using: ✔ signal() for state ✔ computed() for derived data ✔ toSignal() for API integration No messy subscriptions anymore 5. Real-World Architecture Started thinking in Smart vs Dumb Components -Smart → handles API, state -Dumb → handles UI ✔ Better scalability ✔ Easier testing ✔ Clean separation of concerns 6. Production-Level Concepts ✔ Interceptors (JWT, error, loader) ✔ Auth Guards & route protection 🎯 Biggest Realization: Modern Angular is not about writing more code… It’s about writing smarter, reactive and scalable code If you're learning Angular — don’t stop at basics. Modern Angular is a different level #Angular #Frontend #WebDevelopment #SoftwareEngineering #Signals #RxJS #LearningJourney
To view or add a comment, sign in
-
-
Angular — it’s a clear signal of where the framework is heading After reviewing the latest repository signals and technical direction, one thing is obvious: Angular is going all-in on Signals and a Zoneless future. Here’s what’s changing 👇 ❌ What’s getting removed (finally): - ComponentFactory & ComponentFactoryResolver → replaced by "ViewContainerRef.createComponent" - Experimental Jest & Web Test Runner support → shift towards Vitest ecosystem - Support for older TypeScript versions (< 6.0) - RouterTestingModule → use "provideRouter" & "provideLocationMocks" - Loose typing in "appRef.bootstrap()" → stricter type safety ⚠️ What’s officially deprecated (and should be avoided now): - "*ngIf", "*ngFor", "*ngSwitch" → replaced by modern "@if", "@for", "@switch" - Legacy "@angular/animations" → moving toward native CSS + lightweight hooks - "NgClass" & "NgStyle" → prefer "[class]" and "[style]" bindings 🧹 Big mindset shifts in Angular 22: - OnPush becoming the default (performance-first by design) - Signal-based architecture becoming the standard - Components improving maintainability - Signal Forms moving closer to stability Performance is no longer optional → OnPush-like behavior becomes default Signals are not an add-on → they are the foundation Cleaner templates → less structural directive noise Movement toward native platform features (CSS, browser APIs) 💡 What this really means: Angular is simplifying its core, reducing magic, and pushing developers toward a more predictable, reactive, and high-performance model. If you're still writing Angular the “old way,” now is the time to adapt. The future Angular developer writes signal-driven, zoneless, and explicit code. Follow Sonu Sindhu for more updates. #Angular #WebDevelopment #Frontend #JavaScript #Signals #Performance #SoftwareEngineering
To view or add a comment, sign in
-
-
Angular has introduced a new built-in control flow that simplifies template syntax, making it easier to read and understand. For those familiar with Angular, the previous use of *ngIf, ng-template, and additional markup could often lead to messy templates. Here’s a comparison of the old and new syntax for conditional rendering: Before: <div *ngIf="isLoggedIn; else loggedOut"> Welcome back! </div> <ng-template #loggedOut> Please log in </ng-template> Now: @if (isLoggedIn) { <div>Welcome back!</div> } @else { <div>Please log in</div> } This new approach is much cleaner and allows for instant comprehension. For looping over a list, the syntax has also been streamlined: @for (item of items; track item.id) { <div>{{ item.name }}</div> } Key benefits of this change include: - No extra syntax, leading to easier-to-read templates - Reduced HTML clutter - Greater accessibility for new developers - A structure that feels closer to normal programming logic In my view, this update effectively removes much of the “Angular-specific noise” from templates, allowing us to focus more on what the UI should accomplish rather than how to make Angular function. #Angular #builtinControlFlow #FrontEndDevelopment #Angulartips
To view or add a comment, sign in
-
🚀 Angular Series – Day 3 Today’s update in Angular is a BIG shift 👇 🔥 No More NgModules – Standalone Components are Default! Angular is moving towards a simpler and cleaner architecture by removing the need for NgModules. 💡 What changed? You can now build components, pipes, and directives without wrapping them inside modules. ⚔️ Before vs Now: ❌ Old Way (NgModule) @NgModule({ declarations: [HomeComponent], }) export class AppModule {} ✅ New Way (Standalone) @Component({ standalone: true, selector: 'app-home', template: `<h1>Clean & Simple 🚀</h1>` }) export class HomeComponent {} 🎯 Why this matters: ✂️ Less boilerplate ⚡ Faster development 🧠 Easier to understand 📦 Better scalability 💬 What do you think? Are you ready to go fully standalone or still prefer NgModules? 📅 Day 3 done! More Angular features coming tomorrow 👀 #Angular #Angular22 #WebDevelopment #Frontend #JavaScript #TypeScript #Coding #LearningInPublic
To view or add a comment, sign in
-
-
💡 Day 13 – Event Loop Basics Ever wondered how JavaScript handles multiple tasks even though it’s single-threaded? 🤯 Let’s break down the magic behind the Event Loop 👇 🧠 Key Concepts 🔹 Call Stack Where your functions are executed (one at a time) 🔹 Web APIs Handles async tasks (like setTimeout, HTTP calls) 🔹 Callback Queue (Macrotask Queue) Stores callbacks from async operations 🔹 Microtask Queue Higher priority queue (Promises, async/await) 🔹 Event Loop Continuously checks: 👉 Is Call Stack empty? 👉 Then push tasks from queues (microtasks first!) ⚡ Execution Priority 1️⃣ Call Stack 2️⃣ Microtasks (Promises, async/await) 3️⃣ Macrotasks (setTimeout, setInterval) 💻 Example console.log("Start"); setTimeout(() => { console.log("Timeout"); }, 0); Promise.resolve().then(() => { console.log("Promise"); }); console.log("End"); 👉 Output: Start End Promise Timeout 🔥 Why Angular Devs Should Care? ✔ Change detection timing ✔ Zone.js & async operations ✔ Performance optimization ✔ Debugging unexpected UI behavior 🎯 Pro Tip Prefer Promises / async-await over setTimeout when possible for predictable execution. 💬 Have you faced weird async timing issues in Angular? Drop your experience below! #JavaScript #Angular #WebDevelopment #Frontend #AsyncJS #EventLoop #100DaysOfCode
To view or add a comment, sign in
-
-
Angular 21 dropped in November 2025, and it's a bigger architectural shift than most developers probably realize. Here's what actually changed under the hood: 🔁 Zone.js is gone by default Angular has been monkey-patching browser APIs with zone.js for change detection since v2. It worked but caused bloated bundles, unpredictable async behavior, and performance overhead that was hard to profile. In v21, new applications ship zoneless by default, leveraging Signals to surgically update only the view nodes that depend on changed state. This means better Core Web Vitals, native async/await support, and cleaner stack traces. 📝 Signal Forms (experimental) Reactive Forms were already powerful but were kinda verbose. Manual FormGroup/FormControl instantiation, Observable subscriptions that leaked if you forgot to unsubscribe, and validators scattered across your component class. Signal Forms replaces that entire model with a signal that automatically syncs to bound form fields, with centralized schema-based validation and full TypeScript type safety on every field access. 🤖 Angular CLI MCP Server (now stable) This one is easy to underestimate. The Angular CLI now exposes an MCP (Model Context Protocol) server via `ng mcp`. Connect it to Cursor, VS Code, or JetBrains and your AI agent gains the ability to query live Angular docs, analyze your component's dependency graph before recommending migration strategies, and run schematics against your actual project. No need to worry about it guessing or hallucinating. It actually uses the CLI as the source of truth. The `onpush_zoneless_migration` tool can even plan a migration path for existing codebases to get up to date with the new architecture. ♿ Angular Aria (developer preview) A headless, unstyled component library built around WAI-ARIA patterns, handling keyboard interactions, focus management, and screen reader support out of the box. You bring the HTML structure and CSS. It ships 8 patterns covering 13 components. 🧪 Vitest is now the default test runner Karma is officially outta here. Vitest is stable and the CLI scaffolds it by default for new projects. Angular 22 is expected in May 2026 and looks to make OnPush the default change detection strategy. That will essentially lock in the signals-first architecture as the only path forward. #Angular #WebDevelopment #TypeScript #Frontend #JavaScript
To view or add a comment, sign in
-
#Angular #AngularNote #AngularConcepts 🚀 Angular Signals — Complete Beginner Guide (Simple & Practical) If you’re learning Angular today, you’ve probably heard about Signals. Let’s understand it in the simplest way possible 👇 💡 What is a Signal? 👉 A Signal is a reactive variable That means: When its value changes → UI updates automatically 🧠 Example const count = signal(0); <h2>{{ count() }}</h2> Now: count.set(5); 💥 UI instantly updates to 5 No manual change detection. No extra code. 🔥 Types of Signals 1️⃣ Writable Signal 👉 You can update it const count = signal(0); 2️⃣ Computed Signal 👉 Derived value (auto updates) const double = computed(() => count() * 2); 3️⃣ Effect 👉 Runs automatically when signal changes effect(() => { console.log(count()); }); 🔄 How to Update Value count.set(10); // Direct set count.update(v => v+1); // Based on previous value ⚔️ Signals vs Normal Variables ❌ Normal Variable No automatic UI update ✅ Signal Automatic UI update Tracked by Angular ⚠️ Common Mistakes ❌ Forgetting () → count ✅ Correct → count() ❌ Direct update → count = 5 ✅ Correct → count.set(5) 🎯 Why Signals? ✔ Cleaner code ✔ Better performance ✔ No subscriptions (like RxJS) ✔ Fine-grained updates 💬 Defination One-Liner 👉 “Signals are reactive state primitives in Angular that automatically update the UI when their value changes.” If you're working in Angular, Signals are the future of state management 🚀 #Angular #Signals #FrontendDevelopment #WebDevelopment #JavaScript #Programming
To view or add a comment, sign in
-
🚀 Understanding Signals in Angular — A Modern Approach to Reactivity Angular has introduced Signals as a powerful way to handle reactivity with better performance and less complexity compared to traditional approaches like RxJS for certain use cases. 🔍 What are Signals? Signals are reactive values that automatically notify dependent parts of your application when their value changes. 💡 Think of it like this: 👉 A signal holds a value 👉 When the value changes, everything using it updates automatically 🧠 Key Concepts Explained: 1️⃣ Signal (Writable State) A signal stores a value and allows updates. count = signal(0); 2️⃣ Computed Signal (Derived State) Used when a value depends on another signal. double = computed(() => count() * 2); 3️⃣ Automatic UI Updates Angular tracks dependencies and updates the UI when the signal changes. <p>{{ count() }}</p> <p>{{ double() }}</p> 4️⃣ Updating Signals count.set(1); // or count.update(v => v + 1); ⚡ Why Signals? ✔ Fine-grained reactivity ✔ Better performance (no unnecessary re-renders) ✔ Less boilerplate than RxJS in simple cases ✔ Built-in dependency tracking 📌 Real Insight: Signals don’t replace RxJS — they complement it. 👉 Use Signals for UI state 👉 Use RxJS for async streams (HTTP, events) 🎯 Final Thought: Signals simplify state management and make Angular more intuitive, especially for building reactive UIs. Have you started using Signals in your projects? Share your thoughts 👇 #Angular #AngularSignals #FrontendDevelopment #WebDevelopment #JavaScript #RxJS #SoftwareEngineering #UIDevelopment #Coding #TechLearning #Developers #Frontend #AngularDeveloper #LearnAngular #Programming
To view or add a comment, sign in
-
-
Angular DI: Introducing @Service 🚀 Angular is evolving again! Introduces the @Service decorator, and it’s a big deal for how we write clean, maintainable code. What is @Service? While we’ve lived with @Injectable({ providedIn: 'root' }) for years, the new @Service decorator offers a more modern and ergonomic way to define our application logic. It’s designed to be the go-to for singleton services with less boilerplate. The key differences between @Service and @Injectable are: 1. @Service is providedIn: 'root' by default. You can opt into providing the service yourself by setting autoProvided: false on it. 2. @Service doesn't allow constructor-based injection, only the inject function. 3. @Service doesn't support the complex type signature of @Injectable (useClass, useValue etc.). Instead it supports a single factory function. Why the change? ✅ Improved DX: A cleaner, more intuitive syntax for declaring services. ✅ Signal-Ready: Better alignment with Angular’s reactive shift toward Signals and zoneless applications. ✅ Streamlined DI: Simplifies how the compiler handles dependency discovery without sacrificing tree-shakability. This is a clear signal (pun intended!) that the Angular team is doubling down on developer experience. Moving from heavy configuration to intuitive decorators makes our codebases easier to read and scale. Follow Sonu Sindhu for more such posts. Are you a fan of the traditional @Injectable or excited to switch to @Service? Let’s hear your thoughts below! 👇 #Angular #WebDevelopment #SoftwareEngineering #TypeScript #Signals #FrontEndDev #CodingUpdate
To view or add a comment, sign in
-
-
⚡ Same HTML. Different Mindset. You’ve built Angular forms for years. But Angular quietly flipped the script. 🧩 Before: Reactive Forms form = new FormGroup({ name: new FormControl('') }); Then came: 👉 valueChanges 👉 subscribe() 👉 Cleanup logic 👉 Zone.js overhead It worked… but it was imperative chaos. 🚀 After: Signal Forms name = model(''); uppercaseName = computed(() => this.name().toUpperCase()); <input [value]="name()" (input)="name.set($any($event.target).value)" /> <p>{{ uppercaseName() }}</p> ✅ No subscriptions ✅ No boilerplate ✅ Pure reactive state ✅ Zoneless performance ⚖️ The Real Shift Angular isn’t just changing syntax — it’s changing thinking. Forms are no longer “special.” They’re just reactive state nodes in your signal graph. #Angular #Angular22 #Signals #Forms #Frontend #WebDevelopment #ReactiveProgramming #CleanCode #SoftwareEngineering #JavaScript #DevCommunity
To view or add a comment, sign in
-
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development