Angular چیست؟ آموزش کامل و جامع Angular

Angular چیست؟

Angular یک فریم‌ورک متن‌باز و قدرتمند برای ساخت برنامه‌های تک‌صفحه‌ای (SPA) است که توسط Google توسعه داده شده است. این فریم‌ورک به توسعه‌دهندگان امکان می‌دهد تا برنامه‌های وب مقیاس‌پذیر و قابل نگهداری را ایجاد کنند.

Angular با استفاده از TypeScript نوشته شده و از معماری Component-based استفاده می‌کند که باعث می‌شود کد شما ماژولار و قابل آزمون باشد.
مثال ساده یک کامپوننت Angular
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
    <h1>{{ title }}</h1>
    <p>به Angular خوش آمدید!</p>
  `
})
export class AppComponent {
  title = 'برنامه من';
}

تاریخچه Angular

Angular اولین بار در سال 2010 با نام AngularJS معرفی شد. در سال 2016، نسخه کاملاً بازنویسی شده Angular 2 منتشر شد و از آن زمان تاکنون، نسخه‌های جدید به صورت منظم منتشر می‌شوند.

Angular از نسخه 2 به بعد، تغییرات اساسی در معماری و عملکرد داشته و امروزه یکی از محبوب‌ترین فریم‌ورک‌های توسعه وب است.

ساختار پایه Angular

یک پروژه Angular از چندین بخش اصلی تشکیل شده است:

ساختار پروژه Angular
my-app/
├── src/
│   ├── app/
│   │   ├── app.component.ts
│   │   ├── app.component.html
│   │   ├── app.component.css
│   │   └── app.module.ts
│   ├── assets/
│   ├── index.html
│   ├── main.ts
│   └── styles.css
├── package.json
└── angular.json
این ساختار توسط Angular CLI ایجاد می‌شود و شامل تمام فایل‌های مورد نیاز برای شروع یک پروژه Angular است.

بهینه‌سازی Angular برای SEO

بهینه‌سازی برنامه‌های Angular برای موتورهای جستجو نیازمند توجه ویژه است:

تنظیمات SEO در Angular
import { Meta, Title } from '@angular/platform-browser';

@Component({...})
export class SEOComponent {
  constructor(
    private meta: Meta,
    private title: Title
  ) {
    this.title.setTitle('عنوان صفحه | نام برنامه');
    this.meta.addTags([
      { name: 'description', content: 'توضیحات صفحه برای موتورهای جستجو' },
      { name: 'keywords', content: 'Angular, فریم‌ورک, جاوااسکریپت, وب' }
    ]);
  }
}

کامپوننت‌ها در Angular

کامپوننت‌ها بلوک‌های سازنده اصلی در برنامه‌های Angular هستند. هر کامپوننت از سه بخش اصلی تشکیل شده است: قالب HTML، استایل CSS و منطق TypeScript.

مثال یک کامپوننت کامل
// user-profile.component.ts
import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-user-profile',
  template: `
    <div class="profile-card">
      <h2>{{ user.name }}</h2>
      <p>{{ user.email }}</p>
      <button (click)="updateProfile()">به‌روزرسانی پروفایل</button>
    </div>
  `,
  styles: [`
    .profile-card {
      padding: 20px;
      border: 1px solid #ccc;
      border-radius: 8px;
    }
  `]
})
export class UserProfileComponent implements OnInit {
  user = {
    name: 'علی محمدی',
    email: '[email protected]'
  };

  ngOnInit() {
    // کدهای مربوط به مقداردهی اولیه
  }

  updateProfile() {
    // منطق به‌روزرسانی پروفایل
  }
}
استفاده از دکوراتور @Component برای تعریف متادیتای کامپوننت ضروری است و شامل selector، template و styles می‌شود.

سرویس‌ها و تزریق وابستگی

سرویس‌ها در Angular برای اشتراک‌گذاری منطق، داده‌ها و توابع بین کامپوننت‌های مختلف استفاده می‌شوند. تزریق وابستگی، مکانیزم اصلی برای استفاده از سرویس‌ها است.

نمونه سرویس و استفاده از آن
// user.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class UserService {
  private apiUrl = 'https://api.example.com/users';

  constructor(private http: HttpClient) {}

  getUsers(): Observable<any[]> {
    return this.http.get<any[]>(this.apiUrl);
  }
}

// user-list.component.ts
@Component({
  selector: 'app-user-list',
  template: `
    <ul>
      <li *ngFor="let user of users">{{ user.name }}</li>
    </ul>
  `
})
export class UserListComponent implements OnInit {
  users: any[] = [];

  constructor(private userService: UserService) {}

  ngOnInit() {
    this.userService.getUsers()
      .subscribe(users => this.users = users);
  }
}
سرویس‌ها باید تنها یک مسئولیت داشته باشند و از اصل Single Responsibility پیروی کنند.

مسیریابی در Angular

مسیریابی در Angular امکان ناوبری بین صفحات مختلف برنامه را فراهم می‌کند و یکی از ویژگی‌های کلیدی برای ساخت برنامه‌های تک‌صفحه‌ای است.

پیکربندی مسیریابی
// app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';

const routes: Routes = [
  { path: '', redirectTo: '/home', pathMatch: 'full' },
  { path: 'home', component: HomeComponent },
  { path: 'users', component: UserListComponent },
  { path: 'users/:id', component: UserDetailComponent },
  { path: '**', component: NotFoundComponent }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

// app.component.html
<nav>
  <a routerLink="/home">خانه</a>
  <a routerLink="/users">کاربران</a>
</nav>

<router-outlet></router-outlet>
استفاده از RouterLink به جای href برای ناوبری داخلی برنامه توصیه می‌شود تا از بارگذاری مجدد صفحه جلوگیری شود.

فرم‌ها در Angular

Angular دو نوع مختلف فرم ارائه می‌دهد: Template-driven و Reactive. هر کدام برای سناریوهای خاصی مناسب هستند.

مثال فرم Reactive
// registration.component.ts
import { Component } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';

@Component({
  selector: 'app-registration',
  template: `
    <form [formGroup]="registrationForm" (ngSubmit)="onSubmit()">
      <div>
        <label for="name">نام:</label>
        <input id="name" formControlName="name">
        <div *ngIf="registrationForm.get('name')?.errors?.['required']">
          نام الزامی است
        </div>
      </div>

      <div>
        <label for="email">ایمیل:</label>
        <input id="email" formControlName="email" type="email">
        <div *ngIf="registrationForm.get('email')?.errors?.['email']">
          ایمیل معتبر نیست
        </div>
      </div>

      <button type="submit" [disabled]="!registrationForm.valid">
        ثبت‌نام
      </button>
    </form>
  `
})
export class RegistrationComponent {
  registrationForm: FormGroup;

  constructor(private fb: FormBuilder) {
    this.registrationForm = this.fb.group({
      name: ['', Validators.required],
      email: ['', [Validators.required, Validators.email]]
    });
  }

  onSubmit() {
    if (this.registrationForm.valid) {
      console.log(this.registrationForm.value);
    }
  }
}

ماژول‌ها در Angular

ماژول‌ها در Angular مجموعه‌ای از کامپوننت‌ها، سرویس‌ها و سایر ویژگی‌های مرتبط هستند که یک بخش منطقی از برنامه را تشکیل می‌دهند.

ساختار یک ماژول
// feature.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FeatureComponent } from './feature.component';
import { FeatureService } from './feature.service';
import { FeatureRoutingModule } from './feature-routing.module';

@NgModule({
  declarations: [
    FeatureComponent,
    // سایر کامپوننت‌های مرتبط
  ],
  imports: [
    CommonModule,
    FeatureRoutingModule
  ],
  providers: [
    FeatureService
  ],
  exports: [
    FeatureComponent
  ]
})
export class FeatureModule { }
استفاده از ماژول‌ها به مدیریت بهتر کد و بارگذاری تنبل (lazy loading) کمک می‌کند.

قالب‌ها و دایرکتیوها

قالب‌ها در Angular با استفاده از دایرکتیوها و اتصال داده‌ها (data binding) امکان ایجاد رابط کاربری پویا را فراهم می‌کنند.

نمونه استفاده از دایرکتیوها
<div *ngIf="isLoggedIn">
  <h2>خوش آمدید {{ username }}</h2>
  
  <ul>
    <li *ngFor="let item of items; let i = index">
      {{ i + 1 }}. {{ item.name }}
    </li>
  </ul>

  <div [ngClass]="{'active': isActive, 'disabled': !isEnabled}">
    محتوای پویا
  </div>

  <select [(ngModel)]="selectedOption">
    <option *ngFor="let option of options" [value]="option.id">
      {{ option.name }}
    </option>
  </select>
</div>
دایرکتیوهای ساختاری مانند *ngIf و *ngFor باعث تغییر ساختار DOM می‌شوند.

ابزارهای مفید برای کار با Angular

برای توسعه بهتر با Angular، ابزارهای مفید زیر را در نظر بگیرید:

ابزارهای توسعه

– Angular CLI
– Visual Studio Code + Angular Language Service
– Angular DevTools برای Chrome
– WebStorm

ابزارهای تست

– Jasmine
– Karma
– Protractor
– Cypress

استفاده از Angular CLI برای ایجاد پروژه جدید و تولید کامپوننت‌ها، سرویس‌ها و سایر المان‌ها بسیار توصیه می‌شود.

کلمات کلیدی:

Angular TypeScript فریم‌ورک جاوااسکریپت برنامه‌نویسی وب SPA Component-based فرانت‌اند توسعه وب

جمع‌بندی:

در این مقاله به طور جامع با Angular و مفاهیم اصلی آن آشنا شدیم. از مباحث پایه مانند کامپوننت‌ها و سرویس‌ها گرفته تا موضوعات پیشرفته‌تر مانند مسیریابی و مدیریت حالت را بررسی کردیم. Angular با ارائه یک چارچوب قدرتمند و منسجم، امکان توسعه برنامه‌های وب مدرن و مقیاس‌پذیر را فراهم می‌کند. برای تسلط بیشتر بر Angular، پیشنهاد می‌کنیم مستندات رسمی را مطالعه کرده و پروژه‌های عملی انجام دهید.

Leave a Reply

Your email address will not be published. Required fields are marked *