المرشحات (Filters) في AngularJS: المفهوم، الأنواع، وآليات الاستخدام المتقدمة
تُعدّ المرشحات (Filters) أحد الركائز الأساسية في إطار العمل AngularJS، وهي توفر وسيلة فعالة لمعالجة وعرض البيانات داخل القوالب (Templates) بطريقة ديناميكية وبسيطة دون الحاجة إلى إجراء التعديلات على الكود البرمجي في وحدات التحكم (Controllers) أو الخدمات (Services). تساعد المرشحات المطورين على تطبيق تنسيقات مختلفة على البيانات المعروضة، مثل ترتيب العناصر، تحويل الأحرف، تحديد عدد المنازل العشرية، أو حتى تطبيق مرشحات مخصصة تلائم متطلبات المشروع.
يستعرض هذا المقال بشكل موسع مفهوم المرشحات في AngularJS، وآليات عملها، والمرشحات الجاهزة المدمجة في الإطار، كما يوضح طريقة إنشاء مرشحات مخصصة واستخدامها بشكل احترافي داخل التطبيقات.
تعريف المرشحات في AngularJS
المرشح هو دالة تأخذ مدخلاً (عادة من نوع String، Array أو Object) وتُرجع مخرجات معدّلة. يتم استخدام المرشحات غالبًا داخل التعبيرات في ملفات HTML، وذلك لتغيير شكل البيانات قبل عرضها للمستخدم. يمكن تطبيق المرشح مباشرة على البيانات باستخدام الرمز (|) المعروف باسم “بايب Pipe”، وهو ما يجعل استخدام المرشحات واضحًا وسهل القراءة.
مثال:
html<p>{{ اسم | uppercase }}p>
في هذا المثال، يتم تحويل المتغير اسم إلى أحرف كبيرة باستخدام مرشح uppercase.
طريقة عمل المرشحات في AngularJS
عند استخدام مرشح في تعبير داخل القالب (Template Expression)، تمر البيانات من خلال هذا المرشح قبل عرضها. يمكن تكديس عدة مرشحات على نفس التعبير، مما يسمح بتنفيذ سلسلة من التحويلات على نفس القيمة.
مثال:
html<p>{{ التاريخ | date:'dd/MM/yyyy' | uppercase }}p>
يتم أولاً تنسيق التاريخ وفق النمط المحدد، ثم تحويل الناتج إلى أحرف كبيرة.
أنواع المرشحات الجاهزة في AngularJS
يتضمن AngularJS مجموعة متنوعة من المرشحات المدمجة التي تلبي الاحتياجات الشائعة في تطوير الواجهات. فيما يلي أبرز هذه المرشحات:
1. مرشح currency
يُستخدم لعرض القيم المالية بصيغة العملة.
html<p>{{ 1500 | currency }}p>
الناتج: $1,500.00
يمكن أيضًا تحديد رمز العملة:
html<p>{{ 1500 | currency:'€' }}p>
الناتج: €1,500.00
2. مرشح date
يُستخدم لتنسيق التواريخ.
html<p>{{ اليوم | date:'fullDate' }}p>
الناتج: Monday, June 10, 2025
3. مرشح filter
يُستخدم لتصفية عناصر مصفوفة بناءً على شرط.
html<li ng-repeat="عنصر in العناصر | filter:'كلمة'">{{ عنصر }}li>
يعرض فقط العناصر التي تحتوي على كلمة “كلمة”.
4. مرشح json
يُستخدم لتحويل الكائنات إلى صيغة JSON لعرضها.
html<pre>{{ البيانات | json }}pre>
5. مرشح limitTo
يُستخدم لتحديد عدد العناصر التي سيتم عرضها من مصفوفة أو عدد الأحرف من سلسلة نصية.
html<p>{{ الجملة | limitTo:10 }}p>
6. مرشح lowercase
يحول النص إلى أحرف صغيرة.
html<p>{{ الاسم | lowercase }}p>
7. مرشح uppercase
يحول النص إلى أحرف كبيرة.
html<p>{{ الاسم | uppercase }}p>
8. مرشح number
يُستخدم لتنسيق الأرقام حسب عدد المنازل العشرية.
html<p>{{ 1234.567 | number:2 }}p>
9. مرشح orderBy
يُستخدم لترتيب العناصر في مصفوفة حسب خاصية معينة.
html<li ng-repeat="طالب in الطلاب | orderBy:'الاسم'">{{ طالب.الاسم }}li>
جدول يوضح مقارنة سريعة بين أشهر مرشحات AngularJS
| اسم المرشح | نوع البيانات المدخلة | الوظيفة الأساسية | إمكانية تخصيص |
|---|---|---|---|
| currency | Number | عرض الأرقام كقيمة مالية | نعم |
| date | Date | تنسيق التاريخ | نعم |
| filter | Array | تصفية مصفوفة حسب شرط | نعم |
| json | Object | تحويل الكائنات إلى JSON | لا |
| limitTo | Array / String | تحديد الطول | نعم |
| lowercase | String | تحويل النص إلى أحرف صغيرة | لا |
| uppercase | String | تحويل النص إلى أحرف كبيرة | لا |
| number | Number | تنسيق عدد المنازل العشرية | نعم |
| orderBy | Array | ترتيب المصفوفة | نعم |
إنشاء مرشحات مخصصة في AngularJS
بالرغم من تنوع المرشحات المدمجة، قد يحتاج المطورون في كثير من الأحيان إلى مرشحات خاصة لتلبية متطلبات محددة. يتيح AngularJS إنشاء مرشحات مخصصة باستخدام module.filter().
بنية إنشاء مرشح مخصص
javascriptangular.module('تطبيقي').filter('اسمالمرشح', function() {
return function(القيمة, وسيطات...) {
// تعديل القيمة
return القيمة_المعدلة;
};
});
مثال: مرشح يعكس النصوص
javascriptangular.module('تطبيقي').filter('عكس', function() {
return function(النص) {
if (!النص) return '';
return النص.split('').reverse().join('');
};
});
الاستخدام في HTML:
html<p>{{ 'AngularJS' | عكس }}p>
الناتج: SJralugnA
استخدام المرشحات داخل وحدات التحكم (Controllers)
في بعض الأحيان، يكون من المفيد تطبيق المرشح ليس فقط في القوالب ولكن أيضًا داخل الشيفرة الجافا سكريبتية لوحدات التحكم. يمكن تحقيق ذلك عن طريق حقن $filter في وحدة التحكم.
javascriptangular.module('تطبيقي').controller('مثالCtrl', function($scope, $filter) {
var الاسم = 'AngularJS';
$scope.الاسم_المعكوس = $filter('عكس')(الاسم);
});
مزايا استخدام المرشحات
-
فصل المنطق عن العرض: تساعد المرشحات في إبقاء الكود نظيفًا ومفصولًا، حيث تُعالج البيانات عند العرض دون التأثير على نموذج البيانات نفسه.
-
قابلية إعادة الاستخدام: يمكن تطبيق نفس المرشح في أماكن متعددة داخل التطبيق.
-
سهولة الاختبار: نظرًا لأن المرشحات دوال مستقلة، يمكن اختبارها بسهولة بشكل منفصل.
-
مرونة التخصيص: يمكن تعديل مرشح أو إنشاء مرشحات مخصصة وفقًا لمتطلبات الواجهة أو قواعد العمل.
تحديات وقيود استخدام المرشحات
رغم فعالية المرشحات في تحسين واجهة العرض، إلا أن استخدامها المفرط أو غير المدروس قد يؤدي إلى بعض التحديات:
-
أداء ضعيف: إذا تم استخدام مرشحات ضمن
ng-repeatعلى بيانات كبيرة دون استخدامtrack by، فقد يؤدي ذلك إلى بطء الأداء. -
نقص الدعم في Angular الأحدث: في الإصدارات الأحدث من Angular (بدءًا من Angular 2)، تم استبدال نظام المرشحات بما يعرف بـ “Pipes”، ما يعني أن المرشحات كما في AngularJS لم تعد مستخدمة.
-
عدم التفاعل مع الأحداث: المرشحات تُستخدم فقط لعرض البيانات، ولا يمكنها التفاعل مع الأحداث أو تغيير النموذج (Model).
نصائح للاستخدام الفعال للمرشحات
-
استخدم المرشحات فقط لمعالجة البيانات الموجهة للعرض وليس للمنطق البرمجي الأساسي.
-
تجنب استخدام مرشحات داخل تعابير معقدة تؤدي إلى إعادة التقييم المستمر.
-
استخدم
track byفيng-repeatلتقليل تكلفة الأداء. -
قم بتسمية المرشحات المخصصة بطريقة واضحة ومعبرة عن وظيفتها.
-
في حالة بناء تطبيق كبير، فكّر في نقل بعض منطق التنسيق إلى الخدمات أو الفلاتر الخاصة.
الخلاصة
المرشحات في AngularJS تشكل عنصرًا جوهريًا في تحسين طريقة عرض البيانات للمستخدم بطريقة أنيقة وفعالة. من خلال توفير مجموعة مرشحات مدمجة ومرونة في إنشاء مرشحات مخصصة، تتيح AngularJS بيئة خصبة لتنظيم الواجهات وجعلها ديناميكية دون تعقيد الشيفرة. إن الاستخدام الذكي للمرشحات يسهم في بناء تطبيقات أكثر كفاءة من حيث الأداء وأسهل في الصيانة، شرط ألا تُستخدم كبديل عن منطق التطبيق الأساسي، بل كمكمل يعزز من تجربة المستخدم وجودة العرض.
المراجع:
-
Brad Green, Shyam Seshadri. “AngularJS: Up and Running.” O’Reilly Media, 2014.

