AngularJS ketergantungan injeksi
Apa Dependency Injection
Penjelasan di wiki adalah: injeksi ketergantungan (Dependency Injection, disingkat DI) adalah pola desain perangkat lunak, dalam mode ini, satu atau lebih tergantung (atau layanan) disuntikkan (atau disahkan oleh referensi) untuk independen objek (atau klien), dan kemudian menjadi bagian dari negara klien.
model memisahkan klien bergantung pada dirinya sendiri untuk membuat perilaku, yang membuat desain program menjadi longgar digabungkan, dan mengikuti prinsip Ketergantungan Inversi tunggal dan tanggung jawab. pembentukan pola layanan Locator dan perbandingan langsung yang memungkinkan klien untuk memahami bagaimana klien menggunakan sistem untuk menemukan ketergantungan
Sebuah kata --- apa-apa Anda tidak datang ke saya, saya akan menemukan sesuatu.
AngularJS menyediakan mekanisme yang baik untuk injeksi ketergantungan. Berikut lima komponen inti yang digunakan sebagai injeksi ketergantungan:
- nilai
- pabrik
- layanan
- pemberi
- konstan
nilai
Nilai adalah objek javascript sederhana, lulus nilai ke controller (fase konfigurasi) ke:
// 定义一个模块 var mainApp = angular.module("mainApp", []); // 创建 value 对象 "defaultInput" 并传递数据 mainApp.value("defaultInput", 5); ... // 将 "defaultInput" 注入到控制器 mainApp.controller('CalcController', function($scope, CalcService, defaultInput) { $scope.number = defaultInput; $scope.result = CalcService.square($scope.number); $scope.square = function() { $scope.result = CalcService.square($scope.number); } });
pabrik
Pabrik adalah fungsi yang mengembalikan nilai. Membuat dan kontroler pada saat kebutuhan layanan.
Biasanya kita gunakan untuk menghitung atau nilai kembali fungsi pabrik.
// 定义一个模块 var mainApp = angular.module("mainApp", []); // 创建 factory "MathService" 用于两数的乘积 provides a method multiply to return multiplication of two numbers mainApp.factory('MathService', function() { var factory = {}; factory.multiply = function(a, b) { return a * b } return factory; }); // 在 service 中注入 factory "MathService" mainApp.service('CalcService', function(MathService){ this.square = function(a) { return MathService.multiply(a,a); } }); ...
pemberi
AngularJS dibuat oleh penyedia layanan, pabrik, dll (fase konfigurasi).
Provider menyediakan metode pabrik get (), yang mengembalikan nilai / layanan / pabrik.
// 定义一个模块 var mainApp = angular.module("mainApp", []); ... // 使用 provider 创建 service 定义一个方法用于计算两数乘积 mainApp.config(function($provide) { $provide.provider('MathService', function() { this.$get = function() { var factory = {}; factory.multiply = function(a, b) { return a * b; } return factory; }; }); });
konstan
konstan (konstan) digunakan untuk melewati nilai dalam tahap konfigurasi, perhatian konstan untuk tahap ini dalam konfigurasi tidak tersedia.
mainApp.constant("configParam", "constant value");
contoh
Contoh-contoh berikut menyediakan lebih dari beberapa injeksi ketergantungan mekanisme demonstrasi.
<html> <head> <meta charset="utf-8"> <title>AngularJS 依赖注入</title> </head> <body> <h2>AngularJS 简单应用</h2> <div ng-app = "mainApp" ng-controller = "CalcController"> <p>输入一个数字: <input type = "number" ng-model = "number" /></p> <button ng-click = "square()">X<sup>2</sup></button> <p>结果: {{result}}</p> </div> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> <script> var mainApp = angular.module("mainApp", []); mainApp.config(function($provide) { $provide.provider('MathService', function() { this.$get = function() { var factory = {}; factory.multiply = function(a, b) { return a * b; } return factory; }; }); }); mainApp.value("defaultInput", 5); mainApp.factory('MathService', function() { var factory = {}; factory.multiply = function(a, b) { return a * b; } return factory; }); mainApp.service('CalcService', function(MathService){ this.square = function(a) { return MathService.multiply(a,a); } }); mainApp.controller('CalcController', function($scope, CalcService, defaultInput) { $scope.number = defaultInput; $scope.result = CalcService.square($scope.number); $scope.square = function() { $scope.result = CalcService.square($scope.number); } }); </script> </body> </html>