angularjs 依賴注入和服務

依賴注入的是服務。
app.controller app.filter app.directive app.config 都會注入服務斩启。
但是 angular.module:
angular.module(name, [requires], [configFn]);這里沒有依賴注入。 這是模塊管理岖妄。

AngularJS的服務

依賴注入

依賴注入(Dependency Injection)是一種經(jīng)典的設計模式眉菱,主要是用來處理組件如何獲取依賴的問題。

依賴注入可以簡單的理解為:在一個容器中我們定義了很多個模塊和組件化服務珍逸,當模塊需要某些服務時,只需要跟容器說我需要這些服務聋溜,并且只需要提供服務的名稱谆膳,容器就會自動提供這些服務的實例。調用服務的模塊不需要考慮這些服務是怎么來的撮躁,這些服務會由容器通過依賴注入提供給對應的模塊漱病。

注入聲明方式

AngularJs一共提供了三種注入方式
推斷式的注入聲明,顯示注入聲明,行內注入聲明

注意的地方:當依賴注入的服務定義在了另一個模塊中,首先需要將該模塊注入到被依賴的模塊中把曼,然后才能調用該模塊的服務

行內:

var app = angular.module('myApp', []);
app.controller('myCtrl', ['$scope', '$window', function ($scope, $window) {
// do something
}]);

AngularJS內置服務

Paste_Image.png

服務是一個單例對象杨帽,在每個應用中只會被實例化一次(被$injector實例化),并且是延遲加載的(需要時才會被創(chuàng)建)嗤军。服務提供了把與特定功能相關聯(lián)的方法集中在一起的接口注盈。提供了在應用整個生命周期保持數(shù)據(jù)的方法, 比如下面的例子,每個controller里都可以拿到和改變foo.a,保存用戶登陸等信息中我們用到了:

 .controller("myCtrl", ["foo", function( foo){
     foo.sayHello();  
    console.log(foo.a);
}])
.factory("foo", function(){
  return {
    a: 1,
    sayHello: function(){
      this.a++;
      console.log("hello")
    }
  }
})

服務是一個對外提供某個特定功能型雳,如消息服務擎鸠、文件壓縮等的獨立模塊。在AngularJS中拉讯,服務是一個單例對象或者函數(shù)婶芭。具有以下的兩個特點:

  • 服務是一個單例,即無論這個服務被注入到任何地方,對象始終只有一個實例
  • 定義服務的方式也是通過function,但是與我們自己定義一個function然后在其他地方調用不同,因為服務是被定義在一個模塊中权纤,所以其使用的范圍是可以被管理的,這一點體現(xiàn)了AngularJS非常強的避免全局變量污染意識乌妒。

代表性的內置服務

  • $rootScope

每個應用都僅有一個rootScope汹想。其他的例如controller中的scope都是rootScope的后代scope。scope通過監(jiān)聽數(shù)據(jù)層的變化撤蚊,實現(xiàn)了數(shù)據(jù)層和模型層的分離古掏。注冊在$rootScope上的值可以被子$scope覆蓋。

  • $http

$http服務是AngularJS和遠程服務器通過ajax請求進行通信的核心服務侦啸。$http的API是基于$q服務的槽唾,它返回的是一個promise。根據(jù)返回的狀態(tài)碼判斷執(zhí)行成功的回調還是失敗的回調光涂,當狀態(tài)碼為200到299時執(zhí)行成功回調庞萍,不在這個范圍內的都執(zhí)行失敗回調。

  • $q

$q服務是AngularJS自己封裝的一種對Promise的實現(xiàn)忘闻,使用$q一般有兩種方式钝计。

  1. $q構造方法
    $q的構造方法接收一個函數(shù),該函數(shù)接收resolve和reject兩個參數(shù)齐佳,分別代表成功和失敗后的回調函數(shù)
  2. $q的defer()方法
  • $location

$location是用于解析地址欄URL的服務私恬,可以監(jiān)聽和改變地址欄的URL。當改變地址欄或者點擊前進和后退時可以與瀏覽器同步URL

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末炼吴,一起剝皮案震驚了整個濱河市践付,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缺厉,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隧土,死亡現(xiàn)場離奇詭異提针,居然都是意外死亡,警方通過查閱死者的電腦和手機曹傀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門辐脖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人皆愉,你說我怎么就攤上這事嗜价⊥Э伲” “怎么了?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵久锥,是天一觀的道長家淤。 經(jīng)常有香客問我,道長瑟由,這世上最難降的妖魔是什么絮重? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮歹苦,結果婚禮上青伤,老公的妹妹穿的比我還像新娘。我一直安慰自己殴瘦,他們只是感情好狠角,可當我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蚪腋,像睡著了一般丰歌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辣吃,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天动遭,我揣著相機與錄音,去河邊找鬼神得。 笑死厘惦,一個胖子當著我的面吹牛,可吹牛的內容都是我干的哩簿。 我是一名探鬼主播宵蕉,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼节榜!你這毒婦竟也來了羡玛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤宗苍,失蹤者是張志新(化名)和其女友劉穎稼稿,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讳窟,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡让歼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丽啡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谋右。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖补箍,靈堂內的尸體忽然破棺而出改执,到底是詐尸還是另有隱情啸蜜,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布辈挂,位于F島的核電站衬横,受9級特大地震影響,放射性物質發(fā)生泄漏呢岗。R本人自食惡果不足惜冕香,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望后豫。 院中可真熱鬧悉尾,春花似錦、人聲如沸挫酿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽早龟。三九已至惫霸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間葱弟,已是汗流浹背壹店。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芝加,地道東北人硅卢。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像藏杖,于是被迫代替她去往敵國和親将塑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內容

  • 通過AngularJS仿豆瓣一刻的案例:https://github.com/zhongxiaolian/doub...
    中小戀閱讀 1,761評論 1 21
  • title: 看書總結之AngularJS權威教程 第一章 初始AngularJS 1.瀏覽器是如何獲取網(wǎng)頁的 當...
    曹小琳琳閱讀 938評論 0 6
  • AngularJSAngularJS 是一個 MV* 框架蝌麸, 最適于開發(fā)客戶端的單頁面應用点寥。它不是個功能庫,...
    一直以來都很好閱讀 900評論 0 0
  • AngularJS是什么来吩?AngularJs(后面就簡稱ng了)是一個用于設計動態(tài)web應用的結構框架敢辩。首先,它是...
    200813閱讀 1,615評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理弟疆,服務發(fā)現(xiàn)责鳍,斷路器,智...
    卡卡羅2017閱讀 134,720評論 18 139