في الآونة الأخيرة كنت أقرأ دليل AngularJS الموثوق. لأسباب مختلفة (أساسًا أنه ليس لدي أموال ، أنا أكره ذلك ، لذلك اخترت تنزيل الإصدار الإلكتروني عبر الإنترنت (لأنه لا يكلف المال ، هاها ...). الخط واضح تمامًا والتأثير الكلي جيدًا. ومع ذلك ، عندما رأيت رقم الصفحة العليا في الزاوية العلوية ، كان هناك 479 صفحة ... 479 ... تعلم ولكن لا تريد أن تتعلم رقم الصفحة ولكن لا تريد أن تتعلمه؟
لحسن الحظ ، قبل قراءة الكتب الإلكترونية ، كنت أساسيًا قليلاً. لقد تعلمت القليل من خلال مشاهدة مقاطع الفيديو ، من البيانات ذات الاتجاهين المرتبط بالخدمات ، ثم إلى نظام التعليمات ، كان لدي اتصال أكثر أو أقل. بالإضافة إلى ذلك ، خلال مهمة اختيار الدورة الخاصة على شبكة الإنترنت ، تم تصميم نظام بسيط لإدارة فئة الطلاب من خلال AngularJs على الواجهة الأمامية والمعدة على الواجهة الخلفية والموغوز على الواجهة الخلفية. لأنه ليس لدي المال ، لا يمكنني وضعه إلا على جيثب. عنوان GitHub: نظام إدارة الطلاب ، مرحبًا بك في Fork ، دعنا نصل إلى الموضوع أدناه ...
================================================================================================سف
عادة ما تكون هناك ثلاث طرق لكائن للسيطرة على تبعية:
(1) إنشاء تبعيات داخليًا ؛
(2) المراجع من خلال المتغيرات العالمية ؛
(3) تمرير من خلال المعلمات حسب الاقتضاء.
يتحقق حقن التبعية بالطريقة الثالثة. ستجلب الطريقتان الآخران مشاكل مختلفة ، مثل تلويث النطاق العالمي ، مما يجعل العزلة صعبة للغاية ، وما إلى ذلك. إن حقن التبعية هو نمط تصميم يزيل التبعيات المرمزة ، بحيث يمكن تغيير التبعيات أو حتى إزالتها في وقت التشغيل.
تعد القدرة على تعديل التبعيات في وقت التشغيل مثاليًا للاختبار لأنها تتيح لنا إنشاء بيئة معزولة حيث يمكن استخدام الكائنات المستهلكة بدلاً من الكائنات الحقيقية في بيئة الإنتاج.
من منظور وظيفي ، سيجد حقن التبعية تلقائيًا التبعية مقدمًا وإبلاغ المورد المعتمد بهدف الحقن ، بحيث يمكن حقن المورد فورًا عندما يحتاج الهدف إليه.
عند كتابة المكونات التي تعتمد على كائنات أو مكتبات أخرى ، نحتاج إلى وصف التبعيات بين المكونات. أثناء وقت التشغيل ، يقوم الحاقن بإنشاء مثيل للاعتماد ويكون مسؤولاً عن تمريره إلى المستهلك التابع.
// مثال ممتاز من دالة التوثيق الزاوي someclass (Greeter) {this.greeter = Greeter ؛} someclass.prototype.greetName = function (name) {this.greeter.greet (name) ؛} ؛يمكن لـ Someclass الوصول إلى الترحيب الداخلي في وقت التشغيل ، ولكن لا يهتم بكيفية الحصول على إشارة إلى The Greeter. للحصول على إشارة إلى مثيل Greeter ، يكون منشئ Someclass مسؤولاً عن بناء تبعياته وتمريرها.
للأسباب المذكورة أعلاه ، يستخدم AngularJS injetor $ (خدمة الحاقن) لإدارة الاستعلامات وتثبيت التبعيات. في الواقع ، $ injetor مسؤول عن إنشاء جميع المكونات في AngularJs ، بما في ذلك وحدات التطبيق والتعليمات وأجهزة التحكم.
في وقت التشغيل ، يكون injetor $ مسؤولاً عن إنشاء أي وحدة نمطية عند بدء تشغيل جميع التبعيات التي يحتاجها.
على سبيل المثال ، الكود التالي. هذا تطبيق بسيط يعلن وحدة ونقابة وحدة تحكم:
Angular.Module ('myapp' ، []). المصنع ('Greeter' ، function () {return {Greet: function (msg) {alert (msg) ؛}}}). وحدة التحكم (myController '، function ($ scope ، metureter) {$ scope.sayhello = function.عندما تقوم AngularJS بتأسيس هذه الوحدة ، فإنها تبحث عن Greeter وتجاوزها بشكل طبيعي الإشارات إليها:
<div ng-app = "myapp"> <div ng-controller = "myController"> <button ng click = "sayhello ()"
داخليًا ، فإن عملية معالجة AngularJS هي كما يلي:
// استخدم الحاقن لتحميل تطبيق var var enjector = angular.injector (['ng' ، 'myapp']) ؛ myController = $ controller ('myController' ، {$ scope: scope}) ؛لا يحدد الكود أعلاه كيفية العثور على Greeter ، ولكنه يعمل بشكل صحيح لأن حاقن $ سيكون مسؤولاً عن إيجاده وتحميله لنا.
يستخلص AngularJS قائمة المعلمات من الوظيفة التي تم تمريرها أثناء إنشاء مثيل من خلال وظيفة التعليقات التوضيحية. أدخل الكود التالي في أدوات مطور Chrome لعرض هذه الوظيفة:
> enjector.annotate (function ($ Q ، Greeter) {}) ["$ Q" ، "Greeter"]في أي تطبيق AngularJS ، يعمل حاقن $ ، سواء كنا نعرف أم لا. عند كتابة وحدة تحكم ، إذا لم يتم استخدام علامة [] أو تم إصدار إعلان صريح ، فإن حاقن $ يحاول استنتاج التبعيات بأسماء المعلمات.
بيان الحقن المستنتج
إذا لم يكن هناك إعلان صريح ، يفترض AngularJS أن اسم المعلمة هو اسم التبعية. لذلك ، سوف يطلق داخليًا على طريقة TOSTRING () لكائن الوظيفة ، وتحليل واستخراج قائمة معلمات الوظيفة ، وحقن هذه المعلمات في مثيل الكائن من خلال حاقن $. عملية الحقن هي كما يلي:
حاقن.
لاحظ أن هذه العملية قابلة للتطبيق فقط على الكود غير المضغوط والمثطربة ، حيث يتطلب AngularJs قائمة معلمات غير مضغوطة الخام للحلية. مع هذه العملية من الاستدلال بناءً على أسماء المعلمات ، يكون ترتيب المعلمات ذات أهمية ضئيلة ، لأن AngularJs سيساعدنا على ضخ الخصائص بالترتيب الصحيح.
حقن صراحة الإعلانات
يوفر AngularJS طرقًا واضحة لتحديد التبعيات التي تحتاج الوظيفة إلى استخدامها عند استدعاءها. إن إعلان التبعيات بهذه الطريقة لا يزال من الممكن أن يعمل بشكل صحيح حتى لو تم ضغط رمز المصدر وتغير اسم المعلمة. يمكن استخدام خاصية حقن $ لتنفيذ وظيفة الحقن الصريح للإعلانات. خاصية حقن $ لكائن الوظيفة هي صفيف ، ونوع عنصر الصفيف عبارة عن سلسلة ، وقيمها هي اسم الخدمة التي يجب حقنها.
هنا هو رمز العينة:
var acontrollerFactory = function acontroller ($ scope ، metury) {console.log ("وحدة تحكم محملة" ، تحية) ؛ // ... وحدة تحكم} ؛ acontrollerfactory. $ enject = ['$ scope' ، 'Greeter'] ؛ // Generer Service Console.log ("Greeter Service") ؛} // وحدة تحكم التطبيق الخاصة بنا angular.module ('myapp' ، [] = enjector.get ('$ controller') ، rootscope = enjector.get ('$ rootscope') ، newscope = rootscope. $ new () ؛ // call controller controller ('myController' ، {$ scope: newscope}) ؛بالنسبة إلى طريقة الإعلان هذه ، يكون ترتيب المعلمات مهمًا للغاية ، لأن ترتيب عناصر صفيف الحقن $ يجب أن يتوافق مع ترتيب المعلمات المحقونة. يمكن تشغيل طريقة الإعلان هذه في رمز مضغوط لأن المعلومات ذات الصلة للإعلان مرتبطة بالفعل بالوظيفة نفسها.
بيان الحقن داخل الخط
الطريقة الأخيرة لحقن الإعلانات التي توفرها AngularJS هي إعلان الحقن المضمّن الذي يمكن استخدامه في أي وقت. هذه الطريقة هي في الواقع سكر نحوي ، وهو بالضبط نفس المبدأ المذكور أعلاه لإصدار إعلانات الحقن من خلال خاصية حقن $ ، ولكنه يسمح لنا بتمرير المعلمات من داخل الخط عند تعريف الوظيفة. بالإضافة إلى ذلك ، فإنه يتجنب استخدام المتغيرات المؤقتة أثناء عملية التعريف.
عند تحديد كائن AngularJS ، يسمح لنا الإعلان الموجود في الخط بتمرير مجموعة من المعلمات مباشرة بدلاً من الدالة. عناصر الصفيف هي سلاسل ، تمثل أسماء التبعيات التي يمكن حقنها في الكائن. المعلمة الأخيرة هي كائن الكائن نفسه لحقن التبعية.
الأمثلة على النحو التالي:
Angular.Module ('myapp'). وحدة تحكم ('myController' ، ['$ scope' ، 'Greeter' ، function ($ scope ، greeter) {}]) ؛نظرًا لأن ما يجب معالجته هو قائمة بالسلاسل ، يمكن أن تعمل إعلانات الحقن المضمّنة بشكل طبيعي في الكود المضغوط. عادة ما يتم استخدامه بواسطة الأقواس والرمز [] الذي يعلن الصفيف.
حقن التبعية AngularJS أعلاه هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.