abstrakt:初學angularjs階段,剛剛看到菜鳥教程的angularjs依賴注入?,F(xiàn)在整理一下: 1.含義:一個或更多的依賴(可以理解為模塊關(guān)系依賴)或服務(分為內(nèi)建服務[例如$http,$tiomeout等]和自建服務),被注入(或引用到)一個獨立對象中,成為該對象的一部分。 舉個栗子:①一個存在于
初學angularjs階段,剛剛看到菜鳥教程的angularjs依賴注入?,F(xiàn)在整理一下:
1.含義:一個或更多的依賴(可以理解為模塊關(guān)系依賴)或服務(分為內(nèi)建服務[例如$http,$tiomeout等]和自建服務),被注入(或引用到)一個獨立對象中,成為該對象的一部分。
舉個栗子:①一個存在于社會中的人。很多事情不必親自去做,社會為他提供了各種服務,例如圖書館,地鐵,公交,公園等。他想乘坐地鐵去某個地方,不必自己造地鐵,只要花錢(注入)就可以使用這個服務。當然他也可以自己定制個性化服務(社會提供的服務可以理解為內(nèi)建服務),他可以自己定制一個勞斯萊斯(自建服務),不去去苦哈哈的擠地鐵了。
②同樣的這個人,不僅是個體。更是各種關(guān)系(依賴)中的人。比如:張三想去某國內(nèi)頂級醫(yī)院看專家號,而自己的妻子的父親正好和這個專家是熟人,那張三就可以輕松的看到專家號。而不去自己去排隊。
③一個人可以動用社會的服務和自己經(jīng)營的各種人際關(guān)系。去完成很多事情,而不必親力親為。而這些用社會的服務和自己經(jīng)營的各種人際關(guān)系,成為這個人的一部分。
2.目的:高內(nèi)聚,低耦合。
題外話:我怎么感覺是為了偷懶呢。自己想把自己的工作分給別人,但又要保證工作質(zhì)量的做法。哈哈
3.分類:
1)內(nèi)建服務:據(jù)說“AngularJS 內(nèi)建了30 多個服務”。這是菜鳥教程里面一個關(guān)于服務的介紹:http://www.runoob.com/angularjs/angularjs-services.html
2)自建服務:同樣是菜鳥教程的介紹:http://www.runoob.com/angularjs/angularjs-dependency-injection.html
雖然有例子,不過對于我這種小白來說,還是不清楚。所以上網(wǎng)整理一下相關(guān)資料,自建服務的方式主要由三種: Factory Service Provider:
①factory方法。該方法在函數(shù)里面定義了一個對象,然后給這個對象添加屬性和方法,最后返回這個對象:
factory也可以注入內(nèi)建服務:
②service方法與factory方法的不同,service方法去掉了return,實例化了一個類:
service也可以注入內(nèi)建服務。同時factory返回的是對象,service"返回"的是類,factory返回的對象可以被注入到service中進行使用:
③provider是唯一一個可以傳進 .config() 函數(shù)的 service。目的是產(chǎn)生一個可以配置的service。它可以在 service 對象啟用之前,先進行模塊范圍的配置
3)最后,還要說一下。ps:不要把邏輯都寫在controller里面,controller這一層應該很薄。因為controller在不用時(如:切換或者刷新頁面時)就會被銷毀、清空,而service在應用生命周期結(jié)束時(如:關(guān)閉瀏覽器時)才會被清空。所以應該使用service,然后把service注入到controller里面,而讓controller起一個初始化的作用。
具體的原因看這里-這是開源中國上的對原文的翻譯 :http://www.oschina.net/translate/angularjs-factory-vs-service-vs-provider ; 如果你英語水平不錯,可以看看原文,里面有原文鏈接,不過需要fq。