AngularJS 依賴注入詳解和簡單實例
AngularJS 依賴注入
什么是依賴注入
wiki 上的解釋是:依賴注入(Dependency Injection,簡稱DI)是一種軟件設計模式,在這種模式下,一個或更多的依賴(或服務)被注入(或者通過引用傳遞)到一個獨立的對象(或客戶端)中,然后成為了該客戶端狀態(tài)的一部分。
該模式分離了客戶端依賴本身行為的創(chuàng)建,這使得程序設計變得松耦合,并遵循了依賴反轉(zhuǎn)和單一職責原則。與服務定位器模式形成直接對比的是,它允許客戶端了解客戶端如何使用該系統(tǒng)找到依賴
一句話 --- 沒事你不要來找我,有事我會去找你。
AngularJS 提供很好的依賴注入機制。以下5個核心組件用來作為依賴注入:
value
factory
service
provider
constant
value
Value 是一個簡單的 javascript 對象,用于向控制器傳遞值(配置階段):
var mainApp = angular.module("mainApp", []);
// 創(chuàng)建 value 對象 "defaultInput" 并傳遞數(shù)據(jù)
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);
}
});
factory
factory 是一個函數(shù)用于返回值。在 service 和 controller 需要時創(chuàng)建。
通常我們使用 factory 函數(shù)來計算或返回值。
// 定義一個模塊
var mainApp = angular.module("mainApp", []);
// 創(chuàng)建 factory "MathService" 用于兩數(shù)的乘積 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);
}
});
...
provider
AngularJS 中通過 provider 創(chuàng)建一個 service、factory等(配置階段)。
Provider 中提供了一個 factory 方法 get(),它用于返回 value/service/factory。
// 定義一個模塊
var mainApp = angular.module("mainApp", []);
...
// 使用 provider 創(chuàng)建 service 定義一個方法用于計算兩數(shù)乘積
mainApp.config(function($provide) {
$provide.provider('MathService', function() {
this.$get = function() {
var factory = {};
factory.multiply = function(a, b) {
return a * b;
}
return factory;
};
});
});
constant
constant(常量)用來在配置階段傳遞數(shù)值,注意這個常量在配置階段是不可用的。
mainApp.constant("configParam", "constant value");
實例
以下實例提供了以上幾個依賴注入機制的演示。
<html>
<head>
<meta charset="utf-8">
<title>AngularJS 依賴注入</title>
</head>
<body>
<h2>AngularJS 簡單應用</h2>
<div ng-app = "mainApp" ng-controller = "CalcController">
<p>輸入一個數(shù)字: <input type = "number" ng-model = "number" /></p>
<button ng-click = "square()">X<sup>2</sup></button>
<p>結(jié)果: {{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>
運行結(jié)果:

以上就是對AngularJS 依賴注入資料整理,后續(xù)繼續(xù)補充,希望能幫助開發(fā)AngularJS 的朋友。
相關文章
AngularJS實現(xiàn)的錨點樓層跳轉(zhuǎn)功能示例
這篇文章主要介紹了AngularJS實現(xiàn)的錨點樓層跳轉(zhuǎn)功能,涉及AngularJS事件響應實現(xiàn)錨點跳轉(zhuǎn)功能的相關操作技巧,需要的朋友可以參考下2018-01-01
Angular.js中上傳指令ng-upload的基本使用教程
這篇文章主要給大家介紹了關于Angular.js中上傳指令ng-upload的基本使用方法,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。2017-07-07
AngularJS實現(xiàn)單獨作用域內(nèi)的數(shù)據(jù)操作
這篇文章給大家介紹了利用AngularJs如何實現(xiàn)ng-repeat內(nèi)各個小的子作用域單獨數(shù)據(jù)綁定。有需要的小伙伴們可以參考借鑒,下面來一起看看吧。2016-09-09
angularJs使用$watch和$filter過濾器制作搜索篩選實例
本篇文章主要介紹了angularJs使用$watch和$filter過濾器制作搜索篩選實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
AngularJS實現(xiàn)表單手動驗證和表單自動驗證
本文是對AngularJS表單驗證,手動驗證或自動驗證的講解,對學習JavaScript編程技術有所幫助,感興趣的小伙伴們可以參考一下2015-12-12

