Code with zaheer

Learn to code

Learn More

Latest Blog Posts

Angular Standalone Routing Explained — provideRouter() Example Without AppModule

Angular Standalone Routing Explained — How provideRouter() Works Without AppModule

With Angular 15 and later, the framework introduced a standalone component architecture — making Angular applications cleaner and more modular by removing the need for NgModule. If you're wondering where AppModule and RouterModule.forRoot() disappeared, you're not alone! In this guide, you’ll learn:

  • How routing works in modern Angular
  • How to configure routes with provideRouter()
  • How Angular internally handles navigation
  • A complete working example with standalone components

Step 1: Your Project Setup

In new Angular projects (created via )ng new my-app --standalone you’ll typically see these two files:

app.config.ts


import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
import { provideRouter } from '@angular/router';
import { routes } from './app.routes';
import { provideHttpClient } from '@angular/common/http';

export const appConfig: ApplicationConfig = {
  providers: [
    provideZoneChangeDetection({ eventCoalescing: true }),
    provideRouter(routes),
    provideHttpClient(),
  ]
};

app.routes.ts


import { Routes } from '@angular/router';

export const routes: Routes = [];

No AppModule needed — the configuration lives in app.config.ts and app.routes.ts.


Step 2: Define Routes

Define routes normally, but now use standalone components:


// app.routes.ts
import { Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';

export const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'about', component: AboutComponent },
  { path: '**', redirectTo: '' }
];

Step 3: Create Standalone Components

home.component.ts


import { Component } from '@angular/core';

@Component({
  selector: 'app-home',
  standalone: true,
  template: `

Welcome Home!

`, }) export class HomeComponent {}

about.component.ts


import { Component } from '@angular/core';

@Component({
  selector: 'app-about',
  standalone: true,
  template: `

About Us

`, }) export class AboutComponent {}

Step 4: Bootstrap the Application

Angular now bootstraps your app using bootstrapApplication() instead of AppModule:

main.ts


import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';
import { appConfig } from './app/app.config';

bootstrapApplication(AppComponent, appConfig)
  .catch(err => console.error(err));

app.component.ts


import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [RouterOutlet],
  template: `
    

My Angular App

`, }) export class AppComponent {}

Step 5: How provideRouter() Works Internally

Under the hood, provideRouter(routes) replaces RouterModule.forRoot(routes). It registers all routing-related providers into Angular’s dependency injection (DI) system:

  • Router service for navigation
  • RouterOutlet directive for rendering components
  • RouterLink directive for link handling

The flow looks like this:

  1. bootstrapApplication() creates the root injector
  2. provideRouter(routes) adds router providers
  3. The Router parses the URL and renders the matching component inside <router-outlet>

Step 6: Why No AppModule?

Old AngularNew Standalone
AppModule with RouterModule.forRoot()app.config.ts with provideRouter(routes)
bootstrapModule(AppModule)bootstrapApplication(AppComponent, appConfig)
NgModule imports & declarationsComponent-level imports via standalone: true

This new approach makes Angular apps faster, simpler, and more tree-shakable.


Folder Structure


src/
 ├─ app/
 │   ├─ app.component.ts
 │   ├─ app.config.ts
 │   ├─ app.routes.ts
 │   ├─ home/
 │   │   └─ home.component.ts
 │   └─ about/
 │       └─ about.component.ts
 └─ main.ts

Conclusion

Angular’s new standalone routing system with provideRouter() is the future of Angular development. It removes the need for modules, simplifies setup, and improves app performance.

Now you can define routes directly, use standalone components, and enjoy a cleaner Angular architecture.

What is SPA (Single Page Application)? | Angular SPA Explained

What is SPA (Single Page Application)? | Angular SPA Explained

Single Page Application (SPA) Explained for Developers

What is a Single Page Application?

A Single Page Application (SPA) is a modern web application that loads one HTML page and dynamically updates the content using JavaScript, eliminating full page reloads. Frameworks like Angular, React, and Vue enable this interactive, fast-loading web experience.

How SPAs Work Compared to Traditional MPAs

Traditional Multi-Page Application (MPA)

  • Every navigation (for example, /home or /about) sends a new HTTP request to the server.
  • The server responds with a complete HTML page.
  • The browser unloads the old page and loads the new one, causing slower transitions.

Single Page Application (SPA) Flow

  • The browser loads the base HTML, CSS, and JavaScript files once.
  • Client-side routing is managed by frameworks like the Angular Router.
  • Only content updates dynamically — no new HTML pages are fetched.
  • Data is retrieved as JSON via REST API or GraphQL calls.

Example Workflow

When a user visits /home, the server returns index.html and the Angular bundles. Angular renders HomeComponent inside the root component. Navigating to /about loads AboutComponent dynamically without reloading the page.

APIs deliver any needed data asynchronously through Angular’s HttpClient.

Frontend and Backend Separation in SPAs

  • Frontend: Handles UI rendering, client-side routing, and user interactions.
  • Backend: Focuses on serving data via REST APIs and handling business logic.

This separation makes SPAs faster and reduces server workload significantly.

How SPAs Reduce Server Load

  • One-Time Page Load: The HTML and scripts are loaded once; no repeated full-page requests.
  • Only Data Travels: The browser fetches only required data instead of entire HTML pages.
  • Browser Caching: Cached CSS and JS files make repeat visits lightning-fast.

The result is quick navigation and minimal server usage, improving performance and SEO ranking.

SPA vs MPA Summary

Aspect SPA MPA
Navigation Client-side routing Server-side routing
Reloads Single initial load Each route reloads page
Performance Faster with smooth transitions Slower with full-page reloads
Server Load Lower (serves only data) Higher (renders full pages)

Conclusion

Single Page Applications redefine web speed and user experience by combining client-side rendering with real-time data fetching. Frameworks like Angular make SPAs easy to develop, scale, and optimize for performance and SEO.

Start building your SPA today — and deliver fast, seamless experiences to your users.

Guide to testing your local website on mobile devices: Simple steps for developers

How to Test a Local Website on Mobile Devices

How to Test a Local Website on Mobile Devices

Ensuring your website looks and works well on mobile devices is crucial. Testing this can be easy if you know the right steps. In this post, I’ll guide you through testing your local website on your phone in three simple steps. While browser developer tools are useful, testing on an actual mobile device provides better visualization and interaction.

Steps to Test Your Local Website on Your Phone

  1. Run the Live Server

    Open your project in VS Code. Click the "Go Live" button at the bottom right. This starts a local server, usually on port 5500. Your project will open in your default browser. Note the port number.

  2. Find Your Local IPv4 Address

    Open Command Prompt (CMD) on your computer. Type ipconfig and press Enter. Locate your IPv4 address under the "Wireless LAN adapter Wi-Fi" section. It will look something like 192.168.1.x.

  3. View Your Project on Your Phone

    Open the browser on your phone. Enter your IPv4 address followed by the port number, like this: 192.168.1.x:5500. If your main HTML file isn’t named index.html, include the file name in the URL.

You should now see a live preview of your project on your phone. Changes made in VS Code will instantly reflect on your phone without needing a refresh.

Troubleshooting Common Issues

If you face issues like "The site can't be reached," try these solutions:

  • Verify the IPv4 Address and Port Number: Ensure they are correctly entered.
  • Check Network Connection: Both devices should be on the same WiFi network.
  • Check the File Path: Make sure to include the correct file name in the URL if necessary.
  • Adjust Firewall Settings: Your firewall may block the connection. Allow traffic on the Live Server port.

Conclusion

This method helps you see how your website performs on a mobile device, ensuring it’s optimized and responsive. This approach is suitable for both static sites and those using frameworks. Happy testing!

Enhancing Angular Copy Functionality: A Step-by-Step Guide

Enhancing Angular Copy Functionality: A Step-by-Step Guide with Dynamic 'Copied!' Message

Step 1: Install ngx-clipboard
Install the ngx-clipboard library using npm

npm install ngx-clipboard

Step 2: Import ClipboardModule
In your Angular module, import the ClipboardModule:

// your-module.module.ts

import { ClipboardModule } from 'ngx-clipboard';

@NgModule({
  imports: [
    // other imports
    ClipboardModule,
  ],
  // other module properties
})
export class YourModule { }

Step 3: Update Component HTML
Update your component's HTML file:

<!-- your-component.component.html -->
<button (click)="copyToClipboard()">{{ buttonText }}</button>

Step 4: Update Component TypeScript
Update your component's TypeScript file:

// your-component.component.ts

import { Component } from '@angular/core';
import { ClipboardService } from 'ngx-clipboard';

@Component({
  selector: 'app-your-component',
  templateUrl: './your-component.component.html',
  styleUrls: ['./your-component.component.css']
})
export class YourComponent {
  buttonText = 'Copy';

  constructor(private clipboardService: ClipboardService) {}

  copyToClipboard() {
    const numberToCopy = this.obj.number;

    // Use clipboard service to copy the content
    this.clipboardService.copyFromContent(numberToCopy);

    // Change button text to "Copied!" for 2 seconds
    this.buttonText = 'Copied!';
    setTimeout(() => {
      // Revert button text to "Copy" after 2 seconds
      this.buttonText = 'Copy';
    }, 2000);
  }
}


Step 5: Add CSS (Optional)
You can add some styling to enhance the visual feedback. For example, you might want to change the button color when it's in the "Copied!" state. Update your component's CSS file:

/* your-component.component.css */

button.copied {
    background-color: lightgreen;
    /* Add any additional styling you want for the "Copied!" state */
}

A Deep Dive into Angular modules



In Angular, the `app.module.ts` file is a key file that plays a central role in organizing and configuring an Angular application.
simply we can say 
the `app.module.ts` file is the entry point for configuring and organizing your Angular application. It defines the structure of the module, including its components, services, and other features, and establishes the dependencies between different parts of the application.

1. NgModule (NgModule decorator):
   - The `app.module.ts` file is typically where you define an Angular module using the `@NgModule` decorator.
   - This decorator provides metadata that Angular uses to understand how to compile, build, and run your application.

2. Declaration of Components, Directives, and Pipes:
   - Within the `@NgModule` decorator, you declare the components, directives, and pipes that belong to the module.
   - For example, you list all the components created for your application in the `declarations` array.

3. Imports:
   - The `imports` array is used to import other Angular modules that are needed by components declared in the current module. This allows you to organize your application into feature modules and reuse them across the app.

4. Providers:
   - The `providers` array is where you specify the services or dependencies that should be available for dependency injection within the module.

5. Bootstrap Component:
   - The `bootstrap` property specifies the root component of the application. This is the component that Angular will bootstrap when the application starts.

6. Exports:
   - The `exports` array allows you to export components, directives, and pipes from the current module, making them available for use in other modules.

7. Entry Components:
   - The `entryComponents` array is used to specify components that are not referenced in the template but need to be dynamically created, such as components created programmatically.


Example:
app.module.ts: [file]

// Import necessary Angular modules
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

// Import components, directives, and services
import { AppComponent } from './app.component';
import { MyCustomDirective } from './directives/my-custom.directive';
import { MyPipe } from './pipes/my.pipe';
import { MyService } from './services/my.service';

@NgModule({
  // Declarations: Components, directives, and pipes used in this module
  declarations: [
    AppComponent,
    MyCustomDirective,
    MyPipe
  ],
  // Imports: Other modules that are required by components in this module
  imports: [
    BrowserModule
  ],
  // Providers: Services and dependencies available for dependency injection
  providers: [
    MyService
  ],
  // Bootstrap: The root component of the application
  bootstrap: [AppComponent],
  // Exports: Components, directives, and pipes that can be used by other modules
  exports: [
    MyCustomDirective,
    MyPipe
  ],
  // Entry Components: Components created dynamically
  entryComponents: [/* SomeDynamicComponent */]
})
export class AppModule { }

In the above example code:

- We import necessary Angular modules like `BrowserModule` and `NgModule`.
- We import components (`AppComponent`), a directive (`MyCustomDirective`), a pipe (`MyPipe`), and a service (`MyService`).
- The `@NgModule` decorator is used to define the metadata for the module, specifying declarations, imports, providers, bootstrap component, exports, and entry components.
- The `AppModule` class is exported, indicating that this is the main module of the Angular application.




Mastering HTML Programming: Your Ultimate Guide to Web Development - FAQ

HTML FAQ

Frequently Asked Questions (FAQs)

Q: What is HTML?
A: HTML (Hypertext Markup Language) is the standard markup language used to create web pages. It describes the structure of a web page's content using elements like headings, paragraphs, links, and more.
Q: What is HTML programming used for?
A: HTML programming is used to create and structure web pages. It defines the layout, content, and elements on a webpage.
Q: Is HTML programming difficult to learn?
A: HTML is one of the easiest programming languages to learn. It has a straightforward syntax, making it accessible to beginners.
Q: Do I need to memorize all HTML tags?
A: While it's helpful to know common HTML tags, you don't need to memorize them all. Many resources are available online to reference when needed.
Q: Can I use HTML with other programming languages?
A: Yes, HTML is often used in conjunction with CSS for styling and JavaScript for interactivity to create dynamic web pages.
Q: Are there HTML development tools available?
A: Yes, numerous HTML development tools, such as text editors and integrated development environments (IDEs), can aid in creating and editing HTML documents.
Q: Is HTML still relevant today?
A: Absolutely! HTML remains the foundation of web development, and its relevance continues to grow as the web evolves.
Q: What is the difference between HTML and HTML5?
A: HTML5 is the latest version of HTML, and it introduces new features and improvements compared to earlier versions. These include better support for multimedia, advanced form controls, and enhanced semantics.
Q: Can I create responsive web designs using HTML alone?
A: While HTML provides the structure for web pages, responsive web design often involves using CSS (Cascading Style Sheets) to control layout and adapt it to different screen sizes and devices.
Q: Are there any best practices for optimizing HTML code?
A: Yes, best practices include using semantic HTML elements, minimizing the use of inline styles, optimizing images, and ensuring clean and well-structured code for better performance and SEO.
Q: What is the role of HTML in search engine optimization (SEO)?
A: HTML plays a crucial role in SEO by providing structured content that search engines can understand. Properly formatted HTML, including meta tags and headings, can improve a website's search engine ranking.
Q: Are there any HTML frameworks or libraries that can simplify web development?
A: Yes, there are several HTML frameworks and libraries like Bootstrap and Foundation that provide pre-designed components and styles, making it easier to create responsive and visually appealing websites.

Efficiency unleashed: Discover the Top To-Do App to Boast your Productivity

To Do List

Contact Us

Labels

aa (6) angular (6) angular testing (1) cc (6) css (1) cypress (1) da (6) daa (6) dm (1) ds (6) flat (4) fom (6) git & github (3) html (33) informative (12) java (5) javascript (3) job updates (13) mse (6) my tools (2) os (6) pccn (7) postman (1) ppl (2) python (27) wt (6)