AngularJS
AngularJS (المعروف أيضًا باسم Angular 1 ) هو إطار عمل ويب مجاني ومفتوح المصدر قائم على JavaScript، تم إيقاف تطويره، وكان يُستخدم لتطوير تطبيقات الصفحة الواحدة . كانت شركة جوجل ومجتمع من الأفراد والشركات تتولى صيانته بشكل أساسي. كان الهدف منه تبسيط كل من تطوير واختبار هذه التطبيقات من خلال توفير إطار عمل لهياكل MVC و MVVM من جانب العميل، بالإضافة إلى المكونات الشائعة الاستخدام في تطبيقات الويب وتطبيقات الويب التقدمية .
تم استخدام AngularJS كواجهة أمامية لمجموعة MEAN ، والتي تتكون من قاعدة بيانات MongoDB ، وإطار عمل خادم تطبيقات الويب Express.js ، وAngularJS نفسه (أو Angular )، وبيئة تشغيل خادم Node.js.
اعتبارًا من 1 يناير 2022، توقفت جوجل عن تحديث AngularJS لمعالجة مشكلات الأمان، أو توافق المتصفحات، أو jQuery . [ 3 ] [ 4 ] [ 5 ] يوصي فريق Angular بالترقية إلى Angular (الإصدار 2+) كأفضل خيار، لكنهم قدموا أيضًا بعض الخيارات الأخرى. [ 6 ]
ملخص
يعمل إطار عمل AngularJS عن طريق قراءة صفحة لغة ترميز النص التشعبي (HTML) أولاً، والتي تحتوي على سمات HTML مخصصة إضافية مضمنة فيها. يفسر Angular هذه السمات على أنها توجيهات لربط أجزاء الإدخال أو الإخراج من الصفحة بنموذج ممثل بمتغيرات JavaScript قياسية . يمكن تعيين قيم متغيرات JavaScript هذه يدويًا داخل الكود أو استردادها من موارد JSON ثابتة أو ديناميكية.
بُنيَ AngularJS على أساس الاعتقاد بأن البرمجة التصريحية هي الأنسب لإنشاء واجهات المستخدم وربط مكونات البرمجيات ، بينما تُعدّ البرمجة الإجرائية أكثر ملاءمةً لتحديد منطق العمل للتطبيق . [ 7 ] وقد قام هذا الإطار بتكييف وتوسيع لغة HTML التقليدية لعرض محتوى ديناميكي من خلال ربط البيانات ثنائي الاتجاه، مما أتاح المزامنة التلقائية للنماذج والعروض. ونتيجةً لذلك، قلّل AngularJS من أهمية التلاعب الصريح بنموذج كائن المستند (DOM) بهدف تحسين قابلية الاختبار والأداء.
تضمنت أهداف تصميم AngularJS ما يلي:
- لفصل معالجة DOM عن منطق التطبيق. وتتأثر صعوبة ذلك بشكل كبير بطريقة هيكلة الكود.
- لفصل جانب العميل من التطبيق عن جانب الخادم. وهذا يسمح بتقدم أعمال التطوير بالتوازي ويتيح إعادة استخدام كلا الجانبين.
- لتوفير هيكل لرحلة بناء تطبيق: من تصميم واجهة المستخدم، مروراً بكتابة منطق العمل، وصولاً إلى الاختبار.
طبّقت AngularJS نمط MVC لفصل مكونات العرض والبيانات والمنطق. [ 8 ] وباستخدام حقن التبعية ، نقلت Angular الخدمات التي كانت تُقدّم تقليديًا من جانب الخادم ، مثل وحدات التحكم المعتمدة على العرض، إلى تطبيقات الويب من جانب العميل. ونتيجةً لذلك، أمكن تقليل العبء على الخادم بشكل كبير.
نِطَاق
استخدمت AngularJS مصطلح "النطاق" بطريقة تشبه أساسيات علوم الحاسوب.
يُشير مصطلح "النطاق" في علوم الحاسوب إلى الفترة الزمنية التي يكون فيها ربطٌ مُعينٌ صالحًا في البرنامج . وتُعرّف مواصفة ECMA-262 النطاق على أنه: بيئة معجمية يتم فيها تنفيذ كائن دالة في نصوص الويب من جانب العميل؛ [ 9 ] على غرار كيفية تعريف النطاق في حساب لامدا . [ 10 ]
كجزء من بنية "MVC"، يشكل النطاق "النموذج"، ويمكن الوصول إلى جميع المتغيرات المُعرّفة في النطاق من قِبل "العرض" و"المتحكم". يعمل النطاق كحلقة وصل تربط "العرض" و"المتحكم".
بوتستراب
تتم المهمة التي يقوم بها برنامج AngularJS bootstrapper في ثلاث مراحل [ 11 ] بعد تحميل DOM:
- إنشاء حاقن جديد
- مجموعة من التوجيهات التي تُزيّن نموذج كائن المستند (DOM).
- ربط جميع التوجيهات بالنطاق
تتيح توجيهات AngularJS للمطور تحديد عناصر وسمات مخصصة وقابلة لإعادة الاستخدام تشبه عناصر HTML، والتي تحدد روابط البيانات وسلوك مكونات العرض. ومن بين التوجيهات الأكثر استخدامًا:
ng-animate- توفر الوحدة دعمًا لـ JavaScript و CSS3 transition و CSS3 keyframe animation hooks ضمن التوجيهات الأساسية والمخصصة الحالية.
ng-app- يُعلن عن العنصر الجذر لتطبيق AngularJS، والذي يمكن استخدام التوجيهات تحته للإعلان عن الروابط وتحديد السلوك.
ng-aria- وحدة لدعم إمكانية الوصول لسمات ARIA الشائعة .
ng-bind- يُعيّن هذا الأمر نص عنصر DOM بقيمة تعبير مُحدد. على سبيل المثال،
<span ng-bind="name"></span>يعرض قيمة 'name' داخل عنصر span. أي تغيير في المتغير 'name' ضمن نطاق التطبيق ينعكس فورًا في DOM. ng-class- قم بتطبيق فئة بشكل مشروط، اعتمادًا على قيمة تعبير منطقي.
ng-controller- يحدد فئة تحكم JavaScript التي تقوم بتقييم تعبيرات HTML.
ng-if- توجيه شرطي أساسي يُنشئ العنصر التالي إذا كانت الشروط صحيحة. عندما يكون الشرط خاطئًا، يُزال العنصر من DOM. وعندما يكون صحيحًا، تُعاد نسخة من العنصر المُجمّع إلى مكانه.
ng-init- يتم استدعاؤها مرة واحدة عند تهيئة العنصر.
ng-model- يشبه ذلك
ng-bind، ولكنه يُنشئ ربطًا ثنائي الاتجاه للبيانات بين العرض والنطاق. ng-model-options- يوفر إمكانية ضبط كيفية إجراء تحديثات النموذج.
ng-repeat- قم بإنشاء عنصر واحد لكل عنصر من عناصر المجموعة.
ng-showوng-hide- يمكنك إظهار أو إخفاء عنصر ما بناءً على قيمة تعبير منطقي. ويتم ذلك عن طريق ضبط نمط العرض في CSS.
ng-switch- قم بإنشاء قالب واحد بشكل مشروط من مجموعة من الخيارات، وذلك بناءً على قيمة تعبير الاختيار.
ng-view- التوجيه الأساسي المسؤول عن معالجة المسارات [ 12 ] التي تحل JSON قبل عرض القوالب التي يتم تشغيلها بواسطة وحدات التحكم المحددة.
بما أن ng-*السمات غير صالحة في مواصفات HTML، data-ng-*يمكن استخدامها أيضًا كبادئة. على سبيل المثال، كل من ng-appو data-ng-appصالحان في AngularJS.
ربط البيانات ثنائي الاتجاه
كان أبرز ما يميز ربط البيانات ثنائي الاتجاه في AngularJS هو تخفيف عبء إنشاء القوالب عن خادم الواجهة الخلفية بشكل كبير. فبدلاً من ذلك، تُعرض القوالب بلغة HTML عادية بناءً على البيانات الموجودة في نطاق مُحدد في النموذج. $scopeيكتشف النظام في Angular التغييرات التي تطرأ على قسم النموذج ويُعدّل تعبيرات HTML في العرض عبر وحدة تحكم. وبالمثل، تنعكس أي تغييرات في العرض على النموذج. وقد أدى ذلك إلى تجنب الحاجة إلى التلاعب النشط بـ DOM، وشجع على بدء التشغيل السريع وإنشاء النماذج الأولية لتطبيقات الويب. [ 13 ] يكتشف AngularJS التغييرات في النماذج من خلال مقارنة القيم الحالية بالقيم المخزنة سابقًا في عملية فحص التغييرات، على عكس Ember.js و Backbone.js اللذين يُفعّلان مستمعين عند تغيير قيم النموذج. [ 14 ]
$watch- هي طريقة Angular تُستخدم للتحقق من التغييرات. أي متغير أو تعبير مُسند إلى `$scope` يُنشئ تلقائيًا ` $watchExpression` في Angular. لذا، فإن إسناد متغير إلى `$scope` أو استخدام توجيهات مثل `ng-if` و`ng-show` و`ng-repeat`، إلخ، يُنشئ مراقبات في نطاق Angular تلقائيًا. يحتفظ Angular بمصفوفة بسيطة من `$$watchers` في كائنات `$scope` .
- طرق مختلفة لتعريف المراقب في AngularJS.
- قم بمراقبة سمة بشكل صريح على النطاق $scope .
$scope.$watch('person.username', validateUnique);
- ضع عملية الاستيفاء في القالب الخاص بك (سيتم إنشاء مراقب لك على النطاق الحالي $scope).
- اطلب من توجيه مثل ng-model أن يحدد المراقب نيابةً عنك.
<input ng-model="person.username" />
- قم بمراقبة سمة بشكل صريح على النطاق $scope .
$digest- هي دالة Angular يتم استدعاؤها داخليًا بواسطة AngularJS على فترات متقاربة. في دالة $digest ، يقوم Angular بالتكرار على جميع $watches في نطاقه/نطاقاته الفرعية.
$apply- هي دالة في Angular تستدعي داخليًا $digest . تُستخدم هذه الدالة عندما تريد إخبار Angular ببدء فحص التغييرات يدويًا (تنفيذ جميع عمليات المراقبة $watches ).
$destroy- يُعدّ $destroy() في AngularJS بمثابة دالة وحدث في آنٍ واحد. تقوم الدالة $destroy() بإزالة نطاق وجميع عناصره الفرعية من عملية التحقق من التغييرات. ويتم استدعاء حدث $destroy بواسطة Angular عند تدمير أي نطاق أو وحدة تحكم.
تاريخ التطوير
طُوِّرَت AngularJS في الأصل عام 2009 على يد ميشكو هيفري [ 15 ] في شركة برات تك [ 16 ] كبرنامجٍ لخدمة تخزين JSON عبر الإنترنت ، تُسعَّر بالميغابايت، لتسهيل إنشاء تطبيقاتٍ للمؤسسات. كان هذا المشروع مُتاحًا على نطاق الويب "GetAngular.com" [ 16 ] ، وكان لديه عددٌ قليلٌ من المشتركين، قبل أن يقرر المؤسسان التخلي عن فكرة العمل وإطلاق Angular كمكتبةٍ مفتوحة المصدر.
أضاف الإصدار 1.6 العديد من مفاهيم Angular إلى AngularJS، بما في ذلك مفهوم بنية التطبيق القائمة على المكونات. [ 17 ] وقد أزال هذا الإصدار، من بين أمور أخرى، ميزة Sandbox، التي اعتقد العديد من المطورين أنها توفر أمانًا إضافيًا، على الرغم من اكتشاف العديد من الثغرات الأمنية التي تتجاوز هذه الميزة. [ 18 ] الإصدار المستقر الحالي (حتى نوفمبر 2023) من AngularJS هو 1.8.3. [ 19 ]
في يناير 2018، أُعلن عن جدول زمني للتخلص التدريجي من AngularJS: بعد إصدار النسخة 1.7.0، سيستمر التطوير النشط لـ AngularJS حتى 30 يونيو 2018. بعد ذلك، استمر دعم النسخة 1.7 حتى 31 ديسمبر 2021 كدعم طويل الأمد . [ 4 ] [ 5 ]
دعم المتصفحات القديمة
لم تدعم الإصدارات 1.3 وما بعدها من AngularJS متصفح Internet Explorer 8 أو الإصدارات الأقدم. بينما كان الإصدار 1.2 من AngularJS يدعم IE8، إلا أن فريق تطويره لا يدعمه. [ 20 ] [ 21 ]
Angular و AngularDart
تُسمى الإصدارات اللاحقة من AngularJS ببساطة Angular . [ 22 ] Angular عبارة عن إعادة كتابة لـ AngularJS باستخدام TypeScript ، وهي غير متوافقة مع الإصدارات السابقة. تم الإعلان عن Angular 4 في 13 ديسمبر 2016، متجاوزًا الإصدار 3 لتجنب الالتباس الناتج عن عدم توافق إصدار حزمة التوجيه، والتي كانت موزعة بالفعل كإصدار 3.3.0. [ 23 ]
يعمل AngularDart على لغة Dart ، وهي لغة برمجة كائنية التوجه ، تعتمد على الأصناف، وتعتمد على وراثة أحادية، وتستخدم بنية مشابهة للغة C. يختلف هذا عن AngularJS (الذي يستخدم JavaScript ) والإصدارات اللاحقة من Angular مثل Angular 2 وAngular 4 (التي تستخدم TypeScript ). صدر Angular 4 في مارس 2017، وكان رقم إصدار إطار العمل متوافقًا مع رقم إصدار الموجّه المستخدم. صدر Angular 5 في 1 نوفمبر 2017. [ 24 ] تشمل التحسينات الرئيسية في Angular 5 دعم تطبيقات الويب التقدمية، ومُحسِّن البناء، وتحسينات متعلقة بتصميم Material Design. [ 25 ] صدر Angular 6 في 3 مايو 2018، [ 26 ] تلاه Angular 7 في 18 أكتوبر 2018، ثم Angular 8 في 28 مايو 2019.
تتبع Angular معايير الترقيم الدلالي للإصدارات، حيث يشير كل رقم إصدار رئيسي إلى تغييرات قد تؤثر على التوافق. وقد تعهدت Angular بتقديم دعم فعال لمدة ستة أشهر لكل إصدار رئيسي، يليه دعم طويل الأمد لمدة اثني عشر شهرًا. وتصدر الإصدارات الرئيسية كل عامين، مع إصدار فرعي واحد إلى ثلاثة إصدارات فرعية لكل إصدار رئيسي. [ 27 ]
الزاوية العالمية
يتم تشغيل تطبيق Angular العادي في المتصفح، بينما يقوم Angular Universal بإنشاء صفحات التطبيق الثابتة على الخادم من خلال العرض من جانب الخادم (SSR). [ 28 ]
المكتبات
AngularJS Material
كانت مكتبة AngularJS Material [ 29 ] [ 30 ] مكتبة مكونات واجهة مستخدم تُطبّق تصميم Material Design في AngularJS. [ 31 ] قدّمت المكتبة مجموعة من مكونات واجهة المستخدم القابلة لإعادة الاستخدام، والمُختبرة جيدًا، وسهلة الوصول . في يناير 2022، أُغلقت المكتبة، كما أُعلن على موقعها الرسمي. [ 32 ] تُعدّ مكتبة AngularJS Material منتجًا ناضجًا ومستقرًا وجاهزًا للاستخدام في بيئات الإنتاج، وتعمل فقط مع AngularJS 1.x. تتوفر مكتبة Angular Material في مستودع angular/material2 على GitHub .
إضافة كروم
في يوليو 2012، طوّر فريق Angular إضافةً لمتصفح جوجل كروم تُدعى Batarang، [ 33 ] لتحسين تجربة تصحيح أخطاء تطبيقات الويب المبنية باستخدام Angular. هدفت الإضافة إلى تسهيل اكتشاف مواطن الخلل في الأداء، ووفرت واجهة رسومية لتصحيح الأخطاء. [ 34 ] لفترةٍ ما بين أواخر عام 2014 وأوائل عام 2015، لم تكن الإضافة متوافقة مع الإصدارات الحديثة من Angular (بعد الإصدار 1.2.x). [ 35 ] كان آخر تحديث لهذه الإضافة في 4 أبريل 2017. إضافةً إلى ذلك، أُزيلت الإضافة من متجر Chrome الإلكتروني في 1 يونيو 2022، بسبب نقص التحديثات ومخاوف أمنية محتملة، مثل طلبها أذونات حساسة.
أداء
وضع AngularJS نموذجًا لدورة التحديث . يمكن اعتبار هذه الدورة حلقة تكرارية، يتحقق خلالها AngularJS من وجود أي تغييرات في جميع المتغيرات التي يراقبها جميع عناصر التحكم $scopes. إذا $scope.myVarتم تعريف متغير في وحدة تحكم وتم وضع علامة عليه للمراقبة، فسيراقب Angular التغييرات التي تطرأ على myVar في كل تكرار من تكرارات الحلقة.
قد يؤدي هذا النهج إلى بطء عملية العرض عندما يتحقق AngularJS من عدد كبير جدًا من المتغيرات في $scopeكل دورة. اقترح ميشكو هيفري الاحتفاظ بأقل من 2000 مراقب على أي صفحة. [ 14 ]
انظر أيضاً
مراجع
- ↑ "الإصدارات · angular/angular.js" . GitHub . تم الاطلاع عليه في 9 أبريل 2021 .
- ↑ "الإصدار 1.8.3" . 7 أبريل 2022. تم الاطلاع عليه بتاريخ 29 يوليو 2022 .
- ↑ "AngularJS" . docs.angularjs.org . تم الاطلاع عليه بتاريخ 14-05-2021 .
- 1 2 "AngularJS" . docs.angularjs.org . تم الاطلاع عليه في 9 أبريل 2021 .
- 1 2 داروين، بيت بيكون (27 يوليو 2020). "AngularJS مستقر ودعم طويل الأمد" . مدونة Angular . تم الاطلاع عليه في 9 أبريل 2021 .
- ↑ تيكسون، مارك (2 فبراير 2021). "إيجاد مسار للمضي قدماً مع AngularJs" . Medium . تم الاطلاع عليه في 9 أبريل 2021 .
- ↑ "ما هو Angular؟" . تم الاطلاع عليه بتاريخ 12 فبراير 2013 .
- ↑ "AngularJS" . docs.angularjs.org . تم الاطلاع عليه في 9 أبريل 2021 .
- ↑ "شرح ECMAScript 5.1، القسم 10.2 البيئات المعجمية" . تم الاطلاع عليه بتاريخ 2015-01-03 .
- ^ باريندريجت ، هينك. بارندسن، إريك (مارس 2000)، مقدمة في حساب التفاضل والتكامل لامدا (PDF) ، أرشفة من النسخة الأصلية (PDF) في 2020-04-29
- ↑ "توجيهات الكتابة" . angularjs.org. 28 نوفمبر 2012. تم الاطلاع عليه بتاريخ 21 يوليو 2013 .
- ↑ "AngularJS" . docs.angularjs.org . تم الاطلاع عليه في 9 أبريل 2021 .
- ↑ "5 ميزات رائعة في AngularJS" . تم الاطلاع عليه بتاريخ 13 فبراير 2013 .
- 1 2 هيفري، ميسكو. "ربط البيانات في أنجولار جي إس" . تم الاسترجاع في 2014-03-09 .
- ↑ "مرحباً بالعالم، <angular/> هنا" . تم الاسترجاع في 12-10-2014 .
- 1 2 "GetAngular" . Angular / BRAT Tech. LLC. مؤرشف من الأصل بتاريخ 13 أبريل 2010. تم الاطلاع عليه بتاريخ 12 أكتوبر 2014 .
- ↑ "AngularJS: دليل المطور للإصدار 1.5.8: المكونات" . تم الاطلاع عليه بتاريخ 26-09-2017 .
- ↑ "angular.js" . GitHub . تم الاسترجاع في 2017-09-26 .
- ↑ "الإصدار v1.8.3 · angular/angular.js" . GitHub . تم الاطلاع عليه بتاريخ 29 نوفمبر 2023 .
- ↑ "التوافق مع إنترنت إكسبلورر" . دليل مطوري Angular JS 1.7.7 . تاريخ الاطلاع: 12 فبراير 2019.
توقف دعم AngularJS 1.3 لمتصفح إنترنت إكسبلورر 8. اقرأ المزيد حول هذا الموضوع على مدونتنا. سيستمر دعم AngularJS 1.2 لمتصفح إنترنت إكسبلورر 8، لكن الفريق الأساسي لا يخطط لتخصيص وقت لمعالجة المشكلات الخاصة بمتصفح إنترنت إكسبلورر 8 أو الإصدارات الأقدم.
- ↑ مينار، إيغور. "AngularJS 1.3: إصدار جديد يقترب" . مدونة AngularJS . تم الاطلاع عليه بتاريخ 12-10-2014 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ "مقدمة إلى Angular" . تم الاطلاع عليه بتاريخ 2021-12-08 .
- ↑ "حسنًا... دعني أشرح: سيكون Angular 4.0" . angularjs.blogspot.kr . تم الاطلاع عليه بتاريخ 14-12-2016 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ فلوين، ستيفن (26 أبريل 2018). "الإصدار 5.0.0 من Angular متوفر الآن" . Medium . تم الاطلاع عليه في 9 أبريل 2021 .
- ↑ كريل، بول (18 سبتمبر 2017). "تأجيل إطلاق إطار عمل جافا سكريبت AngularJS 5" . إنفوورلد . تم الاطلاع عليه في 9 أبريل 2021 .
- ↑ فلوين، ستيفن (3 مايو 2018). "الإصدار 6 من أنجولار متوفر الآن - مدونة أنجولار" . مدونة أنجولار . تم الاطلاع عليه في 8 يونيو 2018 .
- ↑ "إصدارات Angular وتحديثاتها" . angular.io . تم الاطلاع عليه بتاريخ 8 يونيو 2018 .
- ↑ بيزاك، مارك (7 يناير 2020). "نظرة معمقة على Angular Universal وعرض جانب الخادم" . Medium . تم الاطلاع عليه في 9 أبريل 2021 .
- ↑ "angular/material (GitHub)" . GitHub . تم الاطلاع عليه بتاريخ 24-12-2020 .
- ↑ "وثائق AngularJS Material" . تم الاطلاع عليها بتاريخ 24-12-2020 .
- ^ كوتارو ، ف. كيرتي (25/08/2016). تنفيذ تصميم المواد باستخدام AngularJS: إطار عمل مكون واجهة المستخدم Apress. ص. 4. رقم ISBN 9781484221907.
- ↑ "AngularJS Material" . material.angularjs.org . تم الاطلاع عليه بتاريخ 2022-05-04 .
- ↑ "angular/angularjs-batarang (GitHub)" . GitHub . تم الاسترجاع في 12-10-2014 .
- ↑ فورد، برايان. "تقديم باتارانج AngularJS" . مدونة AngularJS . تم الاسترجاع في 12-10-2014 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ "إضافة باتارانج لمتصفح كروم الخاصة بـ AngularJS تبدو معطلة" . ستاك أوفر فلو .
للمزيد من القراءة
- جرين براد. سيشادري ، شيام (22 مارس 2013). AngularJS (الطبعة الأولى ). أورايلي وسائل الإعلام . ص. 150. ردمك 978-1449344856.
- كوزلوفسكي، باول؛ داروين، بيتر بيكون (23 أغسطس 2013). إتقان تطوير تطبيقات الويب باستخدام AngularJS (الطبعة الأولى ). دار نشر Packt . ص 372. ISBN 978-1782161820.
- روبيلك، لوكاس (1 يناير 2015). AngularJS in Action ( الطبعة الأولى). منشورات مانينغ . ص 325. ISBN 978-1617291333.
روابط خارجية
- الموقع الرسمي
- هاني بوت (2025-02-04). أنجولار: الفيلم الوثائقي | قصة البداية . تم الاطلاع عليه بتاريخ 2025-02-05 – عبر يوتيوب.
- برنامج 2010
- أجاكس (برمجة)
- برنامج جوجل
- أطر عمل الويب باستخدام جافا سكريبت
- برنامج مرخص بموجب ترخيص MIT
