خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه استفاده از دستورالعمل زاویه ای داخلی: ngIf، ngFor، ngClass و موارد دیگر

دستورالعمل های Angular رفتار اضافی را به بخش هایی از برنامه شما اضافه می کند. نحوه استفاده از رایج ترین و مفیدترین دستورالعمل ها را بیابید.

می توانید دستورالعمل هایی را به HTML در پروژه Angular خود اضافه کنید. برخی ساختار نشانه گذاری شما را کنترل می کنند در حالی که برخی دیگر بر روی ویژگی ها تمرکز می کنند.

این مقاله به شش دستورالعمل Angular متداول می‌پردازد: ngFor، ngIf، ngClass، ngStyle، ngModel و ngSwitch.

دستورالعمل های زاویه ای چیست؟

دستورالعمل های Angular به شما این امکان را می دهند که از دستورات if و حلقه های for استفاده کنید و رفتار دیگری را به کد HTML یک پروژه Angular اضافه کنید.

بخشنامه

شرح

*ngاگر

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

*ngبرای

اگر به یک بلوک خاص برای تکرار چندین بار نیاز دارید، می توانید از ngFor استفاده کنید. به عنوان مثال، اگر لیستی از آیتم ها داشتید و نیاز به نمایش div برای هر آیتم داشتید.

*ngClass

این یک ظاهر طراحی شرطی را با استفاده از یک کلاس اضافه می کند. اگر یک عبارت if شرایط را برآورده کند، کلاس مشخص شده را اعمال می کند.

*ngStyle

این یک ظاهر طراحی مشروط را اضافه می کند. اگر یک عبارت if شرایط را برآورده کند، سبک های مشخص شده را اعمال می کند.

*ngModel

این به شما امکان می دهد اتصال دو طرفه را انجام دهید. این بدان معناست که می توانید داده ها را در هر دو جهت بین فایل HTML و TypeScript ارسال کنید. به عنوان مثال، می توانید مقدار یک ویژگی را از فایل TypeScript به فایل HTML منتقل کنید و بالعکس.

*ngSwitch

این به شما این امکان را می دهد که یک دستور سوئیچ با موارد زیادی اضافه کنید تا مقادیر زیادی را بررسی کنید. بر اساس موارد، عناصر HTML خاصی نشان داده می شوند.

دستورالعمل های ساختاری شامل ساختار عناصر HTML است. اینها عبارتند از ngIf، ngFor و ngSwitch. دستورالعمل های ویژگی شامل تغییر ویژگی های عناصر HTML است. اینها شامل ngStyle، ngClass و ngModel هستند.

نحوه استفاده از ngIf

برای استفاده از ngIf، برای نشان دادن یک عنصر HTML خاص، به یک شرط برای ارزیابی درست نیاز دارید.

  1. دو متغیر به فایل TypeScript خود اضافه کنید. در این مثال، یک متغیر noPlaylists و یک متغیر برای ذخیره لیست‌های پخش وجود دارد. اگر طول آرایه لیست های پخش 0 باشد، این متغیر درست ارزیابی می شود.noPlaylists: boolean = false;lists play: any = []; constructor() {}  ngOnInit(): void {    if(this.playlists.length === 0) {      this.noPlaylists = true; }}
  2. در HTML عبارت *ngIf را اضافه کنید. اگر noPlaylists درست باشد، پیام خطای موجود در بازه زیر ظاهر می شود. در غیر این صورت نمی شود. می‌توانید ngIf را برای انواع مختلف برچسب‌های HTML اعمال کنید.
          هیچ لیست پخشی موجود نیست.
  3. برای افزودن مؤلفه «else» به if-statement، باید کد HTML قسمت «else» را در یک بلوک الگو اضافه کنید.
          < span class="errorMessage">هیچ لیست پخشی موجود نیست.

        

            لیست‌های پخش پیدا شد.    

noPlaylists: boolean = false;
playlists: any = [];
 
constructor() { }
  ngOnInit(): void {
    if(this.playlists.length === 0) {
      this.noPlaylists = true;
    }
}

<div *ngIf="noPlaylists" class="center">
      <span class="errorMessage">There are no playlists available.</span>
</div>

مرورگر برای پروژه Angular باز است، با دستور شرطی که پیام خطا را نشان می دهد

<div *ngIf="noPlaylists; else playlistsExist" class="center">
      <span class="errorMessage">There are no playlists available.</span>
</div>
<ng-template #playlistsExist>
    <div class="center">
        <span class="successMessage">Playlists found.</span>
    </div>
</ng-template>

نحوه استفاده از ngFor

اگر نیاز به تکرار تعداد معینی از بلوک ها در یک صفحه دارید، می توانید از دستورالعمل ngFor استفاده کنید.

  1. در فایل TypeScript، موارد را به array.playlists اضافه کنید: any = [   {“name”: “Rock”، “numberOfSongs”: 5}،   {“name”: “Contemporary”، “numberOfSongs”: 9}،   {” name”: “Popular”، “numberOfSongs”: 14}،   {“name”: “Acoustic”، “numberOfSongs”: 3}،   {“name”: “Wedding Songs”، “numberOfSongs”: 25}،   {“name” “: “Metal”, “numberOfSongs”: 0},];
  2. در فایل HTML، عبارت *ngFor را اضافه کنید.لیست‌های پخش یافت شد.
        

           {{playlist.name}}       {{playlist.numberOfSongs}} آهنگ    

    در داخل ngFor، می‌توانید به هر شی ارجاع دهید در آرایه با استفاده از متغیر “playlist”. “playlist.name” و “playlist.numberOfSongs” هر دو ویژگی را در تگ چاپ می کنند.

playlists: any = [
   {"name": "Rock", "numberOfSongs": 5},
   {"name": "Contemporary", "numberOfSongs": 9},
   {"name": "Popular", "numberOfSongs": 14},
   {"name": "Acoustic", "numberOfSongs": 3},
   {"name": "Wedding Songs", "numberOfSongs": 25},
   {"name": "Metal", "numberOfSongs": 0},
];

<span class="successMessage">Playlists found.</span>
<div *ngFor="let playlist of playlists" class="item">
    <div class="flex">
       <span>{{playlist.name}}</span>
       <span>{{playlist.numberOfSongs}} songs</span>
    </div>
</div>

مرورگر برای مثال برای حلقه برای هر div باز است که لیستی از لیست های پخش را نشان می دهد.

نحوه استفاده از ngClass

می توانید کلاس استایلی را که یک div خاص استفاده می کند، بر اساس یک شرط تغییر دهید.

  1. دو کلاس با سبک های مختلف به فایل CSS اضافه کنید. می‌توانید هر نوع استایل CSS را که می‌خواهید اضافه کنید، مانند رنگ‌های پس‌زمینه مختلف.. songs {  background-color: #F7F5F2;}.noSongs {  background-color: #FFA8A8;}
  2. در حلقه for از مرحله قبل، دستورالعمل ویژگی ngClass را اضافه کنید. [ngClass]=”playlist.numberOfSongs > 0 ? ‘songs’ : ‘noSongs'” از همان عملگر سه تایی استفاده می کند که جاوا اسکریپت و سایر زبان ها استفاده می کنند.
            {{playlist.name}}        {{playlist.numberOfSongs}} آهنگ‌ها     

     

اگر تعداد آهنگ‌ها بیشتر از صفر باشد، کلاس «آهنگ‌ها» را به div اعمال می‌کند. این به div رنگ پس زمینه خاکستری می دهد. در غیر این صورت، اگر تعداد آهنگ ها صفر باشد، کلاس “noSongs” را به div اعمال می کند. این به div رنگ پس زمینه قرمز می دهد.

.songs {
  background-color: #F7F5F2;
}
.noSongs {
  background-color: #FFA8A8;
}

<div *ngFor="let playlist of playlists" class="item" [ngClass]="playlist.numberOfSongs > 0 ? 'songs' : 'noSongs'">
    <div class="flex">
        <span>{{playlist.name}}</span>
         <span>{{playlist.numberOfSongs}} songs</span>
     </div>
 </div>

مرورگر برای نمونه ngClass باز است. لیست های پخش با 0 آهنگ قرمز هستند.

نحوه استفاده از ngStyle

به جای استفاده از ngClass، اگر می‌خواهید استایل‌سازی درون خطی را به جای استایل‌سازی از طریق کلاس اعمال کنید، می‌توانید از ngStyle استفاده کنید.

  1. ngClass را از مرحله قبل تغییر دهید تا به جای آن از ngStyle استفاده کنید.
             {{playlist.name}}         {{playlist.numberOfSongs}} آهنگ          div>
  2. اگر نیاز به اعمال بیش از یک سبک درون خطی دارید، می توانید هر سبک را با کاما جدا کنید.[ngStyle]=”{‘background-color’: playlist.numberOfSongs > 0 ? ‘#F7F5F2’ : ‘#FFA8A8’, ‘color’ ‘: playlist.numberOfSongs > 0 ? ‘black’ : ‘blue’ }”

<div *ngFor="let playlist of playlists" class="item" [ngStyle]="{'background-color': playlist.numberOfSongs > 0 ? '#F7F5F2' : '#FFA8A8' }>
     <div class="flex">
         <span>{{playlist.name}}</span>
         <span>{{playlist.numberOfSongs}} songs</span>
     </div>
 </div>

[ngStyle]="{'background-color': playlist.numberOfSongs > 0 ? '#F7F5F2' : '#FFA8A8', 'color': playlist.numberOfSongs > 0 ? 'black' : 'darkblue' }"

نحوه استفاده از ngModel

می توانید از ngModel برای اتصال دو طرفه استفاده کنید. این بدان معنی است که می توانید مقدار یک ویژگی را بین فایل های HTML و TypeScript منتقل کنید.

به عنوان مثال، فرض کنید یک عنصر ورودی در فایل HTML دارید که از ngModel استفاده می کند. ویژگی ngModel به یک متغیر در فایل TypeScript محدود شده است. وقتی مقداری را در ورودی وارد می کنید، متغیر موجود در فایل TypeScript را به روز می کند.

اگر سایر div ها از آن متغیر استفاده کنند، تغییرات ایجاد شده در ویژگی در فایل TypeScript در HTML نیز منعکس خواهد شد.

  1. در app.module.ts، FormsModule را به ورودی‌های بالای فایل، و همچنین به import array.import { FormsModule } from ‘@angular/forms’;@NgModule({    واردات: [         …  Forms Module اضافه کنید ]})
  2. یک ویژگی در فایل TypeScript اضافه کنید تا زمانی که کاربر در حال تغییر نام یک playlist است را پیگیری کند.renamingPlaylists: boolean = false;
  3. متغیر لیست‌های پخش را عمومی کنید تا هنگام استفاده از ngModel در فایل HTML قابل دسترسی باشد. لیست‌های پخش عمومی: any = [    …];
  4. دو دکمه در فایل HTML اضافه کنید، که به شما امکان می‌دهد نام هر فهرست پخش را تغییر دهید یا آن را لغو کنید.
  5. یک کادر ورودی را در داخل قسمت هر لیست پخش اضافه کنید. ورودی تنها زمانی قابل مشاهده خواهد بود که روی دکمه تغییر نام لیست پخش کلیک کنید. این کادر ورودی دارای یک ngModel متصل به “playlist.name” است. هنگامی که نام جدیدی را در کادر ورودی وارد می کنید، playlist.name در فایل TypeScript به روز می شود. سپس سایر div های موجود در فایل HTML که از playlist.name استفاده می کنند نیز به روز می شوند.

import { FormsModule } from '@angular/forms';
@NgModule({
    imports: [
        ...
        FormsModule
    ]
})

renamingPlaylists: boolean = false;

public playlists: any = [
    ...
];

<button type="button" class="btn btn-info" *ngIf="!renamingPlaylists" (click)="renamingPlaylists=true">Rename Playlists</button>
<button type="button" class="btn btn-info" *ngIf="renamingPlaylists" (click)="renamingPlaylists=false">Stop renaming</button>

<input type="text" *ngIf="renamingPlaylists" class="form-control input-field" id="name" required [(ngModel)]="playlist.name" />

فرمی که کاربر یک ورودی وارد می کند و نام بالای لیست پخش با آن تغییر می کند.

نحوه استفاده از ngSwitch

می‌توانید از ngSwitch برای نمایش عناصر خاص بر اساس کیس‌های داخل کیس سوئیچ استفاده کنید.

  1. یک ویژگی “رتبه بندی” جدید به اشیاء داخل آرایه لیست های پخش اضافه کنید. این ویژگی می‌تواند هر عددی بین 0 تا 5 (شامل) باشد. فهرست‌های پخش عمومی: any = [    {“name”: “Rock”، “numberOfSongs”: 5، “rating”: 5}،    {“name”: “Contemporary” , “numberOfSongs”: 9، “rating”: 1}،    {“name”: “Popular”، “numberOfSongs”: 14، “rating”: 5}،    {“name”: “Acoustic”، “numberOfSongs”: 3 , “رتبه”: 4}،    {“name”: “Wedding Songs”، “numberOfSongs”: 25، “rating”: 5}،    {“name”: “Metal”، “numberOfSongs”: 0، “rating”: 0}،  ]؛
  2. زیر نام و تعداد آهنگ‌ها را برای یک لیست پخش، یک دکمه سوئیچ اضافه کنید. بر اساس شماره رتبه‌بندی فهرست پخش، فهرست پخش تعداد صحیح ستاره‌ها را نشان می‌دهد.
       {{playlist.name}}   {{playlist.numberOfSongs} } آهنگ
        

       

    ★★

       

    ★★★

       

    ★★★★
       

    ★★★★★

       

    بدون رتبه‌بندی

public playlists: any = [
    {"name": "Rock", "numberOfSongs": 5, "rating": 5},
    {"name": "Contemporary", "numberOfSongs": 9, "rating": 1},
    {"name": "Popular", "numberOfSongs": 14, "rating": 5},
    {"name": "Acoustic", "numberOfSongs": 3, "rating": 4},
    {"name": "Wedding Songs", "numberOfSongs": 25, "rating": 5},
    {"name": "Metal", "numberOfSongs": 0, "rating": 0},
  ];

<div class="flex">
   <span>{{playlist.name}}</span>
   <span>{{playlist.numberOfSongs}} songs</span>
</div>
<div [ngSwitch]="playlist.rating" style="text-align:right">
    <div *ngSwitchCase="'1'"></div>
   <div *ngSwitchCase="'2'">★★</div>
   <div *ngSwitchCase="'3'">★★★</div>
   <div *ngSwitchCase="'4'">★★★★</div>
   <div *ngSwitchCase="'5'">★★★★★</div>
   <div *ngSwitchDefault>No ratings</div>
</div>

مرورگر برای نمونه ngSwitch باز است. رتبه بندی های مختلف ستاره های متفاوتی را نشان می دهد.

یادگیری بیشتر با Angular

اکنون شما اصول اولیه دستورالعمل های Angular، از جمله نحوه استفاده از ngIf، ngFor، ngClass، ngStyle، ngModel و ngSwitch را یاد گرفته اید. می توانید آنها را برای ایجاد رابط کاربری پیچیده تر ترکیب کنید. چیزهای بیشتری برای کاوش و یادگیری در مورد Angular وجود دارد، مهم نیست که مبتدی هستید یا در سطح پیشرفته.

مطلب مرتبط:   اتوماسیون برق خانگی با رله و آردوینو