Metode memuat layanan ke pengontrol sebagai sumber daya ketergantungan sangat mirip dengan metode memuatnya ke layanan lain.
Karena JavaScript adalah bahasa yang dinamis, DI tidak dapat mengetahui layanan mana yang harus disuntikkan melalui tipe statis (seperti dalam bahasa yang diketik statis). Oleh karena itu, kita perlu menentukan nama layanan melalui properti $ suntikan, yang merupakan array string yang berisi nama layanan yang perlu disuntikkan. Pentingnya Urutan ID Layanan: Urutan parameter dalam metode pabrik konsisten dengan urutan layanan dalam array. Nama parameter dari metode pabrik tidak penting, tetapi seperti biasa mereka cocok dengan ID layanan satu per satu, dan manfaat melakukan hal itu akan dibahas di bawah ini.
1. Injeksi ketergantungan eksplisit
function mycontroller ($ scope, $ loc, $ log) {$ scope.firstmethod = function () {// Gunakan $ LOCATION LAYANAN $ LOC.SETHASH (); }; $ scope.secondMethod = function () {// Gunakan $ LOG Service $ log.info ('...')};} myController. $ inject = ['$ location', '$ log'];contoh:
<! Doctype html> <html lang = "zh-cn" ng-app = "MainApp"> <head> <meta charset = "utf-8"> <itement> eksplisit-inject-service </title> </head> <body> <v ng-controller = "mycontroller"> </head> <von-controller = "mycontroller"> <input> <peT "msg" msg "msg" msgloller "> </heading =" TEPP "MYCROLLER"> </heading = "TEPP-CONTROLER =" myController "> </head" TEPP-CONTROLER = "MYCROLLER"> </head "TEPP-CONTROLER =" MYCROLLER "> </head" msG-controller "> ng-click = "savememsg ()"> simpan msg </button> <ul> <li ng-repeat = "msg in msgs"> {{msg}} </li> </ul> </div> <script src = "../ angular -.0.1.js" Tipe = "Teks/JAVASCRIPT"> </"TEKS =" TEKS = "TEKS =" TEKS = "TEXT/TEXT/TEXT/TEXT/TEXT/TEXT/JAVACCRIPS =" TEXT/TEXT/TEXT/TEXT/JAVACCRIPS = " angular.module ("MainApp", [], function ($ invice) {$ astancy.factory ("notify", ["$ window", "$ timeout", function (win, timeout) {// Ini adalah layanan yang bergantung pada layanan. melalui metode eksplisit ini, function (function) {{{{{{{{{{{{{{{{{{{{{{{{{{ if (msgs.length == 3) {timeout (function () {win.alert (msgs.join ("/n")); msgs = [];}, 10); function mycontroller ($ S, $ noti) {// Ini adalah layanan tergantung controller. Melalui metode eksplisit ini, nama parameter dapat diisi secara acak, tetapi urutannya harus sesuai dengan $ s.msgs = []; $ s.savemsg = function () {this.msgs.push (this.msg); $ noti (this.msg); this.msg = ""; }; } // Tentukan hal -hal yang disuntikkan // Anda juga dapat merujuk pada contoh di http://www.cnblogs.com/lclao/archive/2012/10/16/2725317.html myController. $ Inject = ['$ scope', 'notify']; <//</my.2. Injeksi ketergantungan implisit
Fitur baru dari sudut DI yang memungkinkan dependensi ditentukan oleh nama parameter. Mari kita tulis ulang contoh di atas untuk menunjukkan cara menyuntikkan secara implisit $ window, $ scope, dan memberi tahu layanan.
contoh:
<! Doctype html> <html lang = "zh-cn" ng-app = "MainApp"> <head> <meta charset = "UTF-8"> <Title> Layanan Implisit-Inject </iteme> </head> <body> <v ng-controller = "myontroller"> </head> <bod "TEPP-CONTROLLER =" myController "> <input> <body> <v ng-controller =" mycontroller "> <input>" TEXT "msg" msg "msgloller"> </heading = "TEPP-CONTROLER =" myController "> </head" TEPP-CONTROLER = "MYCROLLER"> </head "TEPP-CONTROLER =" myController "> ng-click = "savememsg ()"> simpan msg </button> <ul> <li ng-repeat = "msg in msgs"> {{msg}} </li> </ul> </div> <script src = "../ angular -.0.1.js" Tipe = "Teks/JAVASCRIPT"> </"TEKS =" TEKS = "TEKS =" TEKS = "TEXT/TEXT/TEXT/TEXT/TEXT/TEXT/JAVACCRIPS =" TEXT/TEXT/TEXT/TEXT/JAVACCRIPS = " angular.module ("MainApp", [], function ($ inced) {$ administrasi. $ window.alert (msgs.join ("/n")); Beri tahu (this.msg);Meskipun ini sangat nyaman, jika kita perlu mengompres dan mengaburkan kode kita, ini dapat menyebabkan nama parameter diubah. Dalam hal ini, kita masih perlu menggunakan deklarasi ketergantungan yang eksplisit.
Di atas adalah informasi tentang layanan suntikan AngularJS ke pengontrol. Kami akan terus menambahkan informasi yang relevan di masa mendatang. Terima kasih atas dukungan Anda untuk situs ini!