تشبه طريقة تحميل خدمة التحميل في وحدة التحكم كمورد تبعية إلى حد كبير طريقة تحميلها في خدمات أخرى.
نظرًا لأن JavaScript هي لغة ديناميكية ، لا يمكن لـ DI معرفة الخدمة التي يجب حقنها من خلال أنواع ثابتة (كما هو الحال في اللغات المكتوبة الثابتة). لذلك ، نحتاج إلى تحديد اسم الخدمة من خلال خاصية $ enjuct ، وهي مجموعة من الأوتار التي تحتوي على أسماء الخدمة التي يجب حقنها. أهمية معرف الخدمة: ترتيب المعلمات في طريقة المصنع يتوافق مع ترتيب الخدمة في المصفوفة. أسماء المعلمات لطرق المصنع ليست مهمة ، ولكن كالعادة تتطابق مع معرف الخدمة واحدًا تلو الآخر ، وستتم مناقشة فوائد القيام بذلك أدناه.
1. حقن التبعية الصريح
وظيفة myController ($ scope ، $ loc ، $ log) {$ scope.firstmethod = function () {// use $ location service $ loc.sethash () ؛ } ؛ $ scope.secondmethod = function () {// استخدم $ log service $ log.info ('...')} ؛} myController. $ enject = ['$ location' ، '$ log'] ؛مثال:
<! doctype html> <html lang = "zh-cn" ng-app = "mainapp"> <head> <meta charset = "utf-8"> <title> صريح الحقن </title> </head> ng-click = "savemsg ()"> حفظ msg </utton> <ul> <li ng-repeat = "msg in msgs"> {{msg}} </li> </ul> </viv> <script src = "../ Angular-1.1.1.js" type/javascript "> Angular.Module ("mainapp" ، [] ، function ($ prode) {$ prove.factory ("Attify" ، ["$ window" ، "$ timeout" ، function (win ، timeout) {// هذه خدمة تعتمد على الخدمة. if (msgs.length == 3) {timeout (function () {win.alert (msgs.join ("/n") ؛ msgs = [] ؛} ، 10) ؛ وظيفة myController ($ s ، $ noti) {// هذه هي الخدمة المعتمدة على وحدة التحكم. من خلال هذه الطريقة الصريحة ، يمكن ملء أسماء المعلمات بشكل عشوائي ، ولكن يجب أن يتوافق الترتيب مع $ s.msgs = [] ؛ $ s.savemsg = function () {this.msgs.push (this.msg) ؛ $ noti (this.msg) ؛ this.msg = "" ؛ } ؛ }.2. حقن التبعية الضمنية
ميزة جديدة من Angular DI تسمح بتحديد التبعيات بواسطة أسماء المعلمات. دعنا نعيد كتابة المثال أعلاه لإظهار كيفية حقن نافذة $ ضمنيًا ونطاق $ وإخطار الخدمة.
مثال:
<! doctype html> <html lang = "zh-cn" ng-app = "mainapp"> <head> <meta charset = "utf-8"> <title> ضمنية الحاقن </title> </head> ng-click = "savemsg ()"> حفظ msg </utton> <ul> <li ng-repeat = "msg in msgs"> {{msg}} </li> </ul> </viv> <script src = "../ Angular-1.1.1.js" type/javascript "> Angular.Module ("mainapp" ، [] ، function ($ prode) {$ prove.factory ("DOTIFER" ، function ($ window ، $ timeout) {// service تعتمد على الخدمات ، تعتمد ضمنيًا ، الاسم هو نفس var msgs = [] ؛ $ window.alert (msgs.oined ("/n") ؛ This.MSG) ؛على الرغم من أن هذا مريح للغاية ، إذا كنا بحاجة إلى ضغط الكود والتشويش عليه ، فقد يتسبب ذلك في تغيير اسم المعلمة. في هذه الحالة ، ما زلنا بحاجة إلى استخدام إعلان صريح عن التبعيات.
ما سبق هو المعلومات حول خدمات حقن AngularJS في وحدات التحكم. سنستمر في إضافة المعلومات ذات الصلة في المستقبل. شكرا لك على دعمك لهذا الموقع!