إنشاء تطبيق قائمة مهام وتنسيقه باستخدام Angular
تطبيقات إدارة المهام أو “قوائم المهام” تعد من أكثر التطبيقات العملية انتشاراً في عالم البرمجيات، لما لها من دور كبير في تنظيم العمل اليومي وتحسين الإنتاجية الشخصية والجماعية. ومن بين أشهر أطر العمل المستخدمة حالياً لتطوير تطبيقات الويب التفاعلية، يأتي Angular كواحد من الحلول الأمثل لبناء تطبيقات قوية ومرنة. في هذا المقال، سنتناول بشكل موسع كيفية إنشاء تطبيق قائمة مهام (To-Do List) باستخدام إطار العمل Angular، مع التركيز على تصميم التطبيق وتنسيقه بأسلوب احترافي يتوافق مع معايير واجهات المستخدم الحديثة.
مقدمة عن Angular
Angular هو إطار عمل مفتوح المصدر يعتمد على TypeScript، طورته شركة Google، ويهدف إلى تسهيل تطوير تطبيقات الويب الديناميكية والمعقدة من خلال هيكلة واضحة ومنهجية تعتمد على مكونات (Components)، خدمات (Services)، ونظام توجيه (Routing). يتيح Angular إمكانية إنشاء تطبيقات ذات واجهة مستخدم تفاعلية، قابلة للصيانة والتطوير المستقبلي بسهولة.
من أبرز مزايا Angular:
-
المكونات القابلة لإعادة الاستخدام: تصميم مكونات صغيرة مستقلة يمكن دمجها بسهولة.
-
الربط الثنائي للبيانات (Two-Way Data Binding): التزامن التلقائي بين النموذج والواجهة.
-
نظام التوجيه المتقدم: إدارة التنقل بين الصفحات داخل التطبيق بشكل سلس.
-
الخدمات (Services) والحقن (Dependency Injection): تسهيل إدارة البيانات والمنطق عبر التطبيق.
خطوات بناء تطبيق قائمة مهام باستخدام Angular
لبناء تطبيق قائمة مهام متكامل، يجب اتباع مراحل محددة بدءاً من إعداد بيئة العمل وصولاً إلى إضافة الوظائف والتنسيق النهائي.
1. إعداد بيئة التطوير
لبدء العمل مع Angular، يجب تثبيت Node.js و Angular CLI (واجهة الأوامر الخاصة بـ Angular).
-
تثبيت Node.js: https://nodejs.org
-
تثبيت Angular CLI عبر الأمر:
bashnpm install -g @angular/cli
-
إنشاء مشروع جديد:
bashng new todo-app
-
الدخول إلى مجلد المشروع وتشغيله محلياً:
bashcd todo-app
ng serve
يفتح التطبيق على المتصفح عبر العنوان http://localhost:4200/.
2. بناء الهيكل الأساسي للمكونات
سيتم إنشاء مكون رئيسي لعرض قائمة المهام، إضافة مهمة جديدة، وحذف المهام المكتملة.
-
إنشاء مكون المهام:
bashng generate component task-list
-
إنشاء مكون لإضافة مهمة جديدة:
bashng generate component task-add
3. تصميم نموذج بيانات المهمة
ينبغي تعريف نموذج بيانات يمثل كل مهمة في قائمة المهام. يمكن ذلك باستخدام TypeScript class أو interface.
typescriptexport interface Task {
id: number;
title: string;
completed: boolean;
}
يحتوي هذا النموذج على ثلاثة خصائص أساسية:
-
id: معرف فريد لكل مهمة.
-
title: نص المهمة.
-
completed: حالة المهمة، إذا كانت مكتملة أم لا.
4. إدارة حالة المهام باستخدام الخدمة (Service)
للحفاظ على حالة المهام وإدارتها بطريقة منظمة ومستقلة عن المكونات، من الأفضل إنشاء خدمة Angular خاصة بالمهام.
bashng generate service task
داخل هذه الخدمة يتم تعريف قائمة المهام، بالإضافة إلى الوظائف اللازمة مثل:
-
إضافة مهمة جديدة.
-
حذف مهمة.
-
تحديث حالة مهمة (مكتملة/غير مكتملة).
-
جلب قائمة المهام.
typescriptimport { Injectable } from '@angular/core';
import { Task } from './task.model';
@Injectable({
providedIn: 'root'
})
export class TaskService {
private tasks: Task[] = [];
private nextId = 1;
constructor() { }
getTasks(): Task[] {
return this.tasks;
}
addTask(title: string): void {
this.tasks.push({ id: this.nextId++, title, completed: false });
}
deleteTask(id: number): void {
this.tasks = this.tasks.filter(task => task.id !== id);
}
toggleTaskCompletion(id: number): void {
const task = this.tasks.find(task => task.id === id);
if (task) {
task.completed = !task.completed;
}
}
}
5. ربط المكونات بالخدمة
مكون إضافة المهمة (task-add)
يحتوي على نموذج لإدخال نص المهمة والزر لإضافتها:
typescriptimport { Component } from '@angular/core';
import { TaskService } from '../task.service';
@Component({
selector: 'app-task-add',
template: `
`
})
export class TaskAddComponent {
taskTitle = '';
constructor(private taskService: TaskService) { }
addTask(): void {
if (this.taskTitle.trim()) {
this.taskService.addTask(this.taskTitle.trim());
this.taskTitle = '';
}
}
}
مكون عرض المهام (task-list)
يعرض قائمة المهام ويتيح إكمال أو حذف المهام:
typescriptimport { Component } from '@angular/core';
import { TaskService } from '../task.service';
import { Task } from '../task.model';
@Component({
selector: 'app-task-list',
template: `
-
{{ task.title }}
`,
styles: [`
.completed {
text-decoration: line-through;
color: gray;
}
`]
})
export class TaskListComponent {
tasks: Task[] = [];
constructor(private taskService: TaskService) {
this.tasks = this.taskService.getTasks();
}
toggleCompletion(id: number): void {
this.taskService.toggleTaskCompletion(id);
}
deleteTask(id: number): void {
this.taskService.deleteTask(id);
}
}
6. دمج المكونات في التطبيق الرئيسي
في ملف app.component.html يمكن تضمين مكونات الإضافة والعرض:
html<h1>تطبيق قائمة المهامh1>
<app-task-add>app-task-add>
<app-task-list>app-task-list>
تنسيق وتصميم التطبيق باستخدام CSS و Angular Material
لتحسين تجربة المستخدم من الناحية البصرية، يمكن استخدام عدة أساليب لتنسيق التطبيق:
1. استخدام CSS التقليدي
يمكن تخصيص الألوان، الخطوط، وحجم النصوص عبر ملفات CSS الخاصة بالمكونات، كما في المثال:
cssinput {
padding: 10px;
font-size: 16px;
width: 300px;
margin-right: 10px;
}
button {
padding: 10px 15px;
background-color: #007bff;
border: none;
color: white;
font-weight: bold;
cursor: pointer;
border-radius: 4px;
}
button:hover {
background-color: #0056b3;
}
ul {
list-style-type: none;
padding: 0;
}
li {
padding: 10px 0;
display: flex;
align-items: center;
}
li button {
margin-left: auto;
background-color: #dc3545;
}
li button:hover {
background-color: #a71d2a;
}
2. استخدام مكتبة Angular Material
تقدم مكتبة Angular Material مجموعة من المكونات المصممة مسبقاً والتي تتبع مبادئ التصميم المادي (Material Design) مما يضيف للمشروع طابعاً احترافياً وأنيقاً.
خطوات تثبيت Angular Material
bashng add @angular/material
سيتم توجيهك لاختيار الثيمات والأيقونات المطلوبة.
استخدام مكونات Angular Material في التطبيق
-
استبدال عناصر الإدخال بالأزرار والحقول من Material.
مثال مكون إضافة المهمة بعد تطبيق Angular Material:
html<mat-form-field appearance="fill">
<mat-label>أدخل مهمة جديدةmat-label>
<input matInput [(ngModel)]="taskTitle" />
mat-form-field>
<button mat-raised-button color="primary" (click)="addTask()">إضافةbutton>
-
قائمة المهام باستخدام
mat-listوmat-checkbox:
html<mat-list>
<mat-list-item *ngFor="let task of tasks">
<mat-checkbox [(ngModel)]="task.completed" (change)="toggleCompletion(task.id)">{{ task.title }}mat-checkbox>
<button mat-icon-button color="warn" (click)="deleteTask(task.id)">
<mat-icon>deletemat-icon>
button>
mat-list-item>
mat-list>
تحسينات وتوسعات يمكن إضافتها لتطبيق قائمة المهام
1. تخزين البيانات محلياً
لحفظ حالة المهام حتى بعد إعادة تحميل الصفحة، يمكن استخدام LocalStorage.
typescriptgetTasks(): Task[] {
const tasks = localStorage.getItem('tasks');
return tasks ? JSON.parse(tasks) : [];
}
saveTasks(): void {
localStorage.setItem('tasks', JSON.stringify(this.tasks));
}
addTask(title: string): void {
this.tasks.push({ id: this.nextId++, title, completed: false });
this.saveTasks();
}
deleteTask(id: number): void {
this.tasks = this.tasks.filter(task => task.id !== id);
this.saveTasks();
}
toggleTaskCompletion(id: number): void {
const task = this.tasks.find(task => task.id === id);
if (task) {
task.completed = !task.completed;
this.saveTasks();
}
}
2. تقسيم المهام إلى مجموعات
يمكن إضافة خاصية تصنيف المهام حسب الأولوية أو حسب الفئة مثل العمل، الدراسة، الحياة الشخصية.
3. دعم تعديل المهام
إضافة إمكانية تعديل نص المهمة بعد إضافتها.
4. إضافة خاصية البحث والفلترة
للبحث عن مهمة محددة أو عرض المهام المكتملة فقط.
جدول مقارنة بين استخدام CSS التقليدي و Angular Material في تنسيق التطبيق
| المعيار | CSS التقليدي | Angular Material |
|---|---|---|
| سهولة الاستخدام | يحتاج لكتابة الكثير من القواعد يدوياً | مكتبة جاهزة مع مكونات مصممة مسبقاً |
| التوافق مع التصميم الحديث | يعتمد على مهارات المطور | يتبع مبادئ تصميم مادي معتمدة |
| التفاعل والحركات | محدود إلا إذا تمت برمجتها يدوياً | يتضمن تأثيرات وتفاعلات مدمجة |
| قابلية التخصيص | عالية لكن تتطلب وقت وجهد | قابلة مع حدود معينة للتخصيص |
| حجم المشروع النهائي | أقل نظرياً | يضيف حجم إضافي للمكتبة |
الخاتمة
إن إنشاء تطبيق قائمة مهام باستخدام Angular يمثل فرصة رائعة لفهم كيفية بناء تطبيقات ويب متقدمة قائمة على مكونات قابلة لإعادة الاستخدام مع استغلال كامل لقدرات إطار العمل. من خلال اتباع المراحل السابقة، يمكن الحصول على تطبيق وظيفي متكامل، يمكن تحسينه لاحقاً بتقنيات التخزين المحلي، تصنيف المهام، ودمج مكتبات تصميم حديثة مثل Angular Material.
التنسيق الجيد والتصميم المناسب يلعبان دوراً محورياً في نجاح التطبيق من حيث سهولة الاستخدام وجاذبيته للمستخدمين. اختيار استخدام CSS التقليدي أو Angular Material يعتمد على حجم المشروع ومتطلبات التصميم ومستوى المرونة المطلوبة. Angular كمنصة يقدم مجموعة متكاملة من الأدوات التي تسمح بتطوير تطبيقات قوية، متجاوبة، وسهلة الصيانة، وهذا ما يجعلها خياراً رائجاً لتطوير تطبيقات الويب الحديثة، بما في ذلك تطبيقات قائمة المهام.
المصادر والمراجع
-
Angular Documentation – https://angular.io/docs
-
Angular Material Guide – https://material.angular.io/
بهذا، يكون المقال قد استعرض بشكل تفصيلي خطوات بناء تطبيق قائمة مهام باستخدام Angular، من مرحلة الإعداد مروراً بتصميم الهيكل والربط بين المكونات، ووصولاً إلى تنسيق التطبيق وتحسين تجربة المستخدم، مع توضيح الفروقات بين استخدام CSS التقليدي و Angular Material.

