最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

AngularJS的依賴注入實例分析(使用module和injector)

 更新時間:2017年01月19日 11:19:38   作者:aitangyong  
這篇文章主要介紹了AngularJS的依賴注入,結(jié)合實例形式分析了依賴注入的原理及使用module和injector實現(xiàn)依賴注入的步驟與操作技巧,需要的朋友可以參考下

本文實例分析了AngularJS的依賴注入。分享給大家供大家參考,具體如下:

依賴注入(DI)的好處不再贅言,使用過spring框架的都知道。AngularJS作為前臺js框架,也提供了對DI的支持,這是JavaScript/jQuery不具備的特性。angularjs中與DI相關(guān)有angular.module()、angular.injector()、 $injector、$provide。對于一個DI容器來說,必須具備3個要素:服務(wù)的注冊、依賴關(guān)系的聲明、對象的獲取。比如spring中,服務(wù)的注冊是通過xml配置文件的<bean>標簽或是注解@Repository、@Service、@Controller、@Component實現(xiàn)的;對象的獲取可以ApplicationContext.getBean()實現(xiàn);依賴關(guān)系的聲明,即可以在xml文件中配置,也可以使用@Resource等注解在Java代碼中聲明。在angular中,module和$provide相當于是服務(wù)的注冊;injector用來獲取對象(angular會自動完成依賴的注入);依賴關(guān)系的聲明在angular中有3種方式。下面從這3個方面,介紹下angular的DI。

1、angular.module()創(chuàng)建、獲取、注冊angular中的模塊

The angular.module() is a global place for creating, registering and retrieving Angular modules.When passed two or more arguments, a new module is created. If passed only one argument, an existing module (the name passed as the first argument to module) is retrieved。

// 傳遞參數(shù)不止一個,代表新建模塊;空數(shù)組代表該模塊不依賴其他模塊
var createModule = angular.module("myModule", []);
// 只有一個參數(shù)(模塊名),代表獲取模塊
// 如果模塊不存在,angular框架會拋異常
var getModule = angular.module("myModule");
// true,都是同一個模塊
alert(createModule == getModule);

該函數(shù)既可以創(chuàng)建新的模塊,也可以獲取已有模塊,是創(chuàng)建還是獲取,通過參數(shù)的個數(shù)來區(qū)分。

angular.module(name, [requires], [configFn]);
name:字符串類型,代表模塊的名稱;
requires:字符串的數(shù)組,代表該模塊依賴的其他模塊列表,如果不依賴其他模塊,用空數(shù)組即可;
configFn:用來對該模塊進行一些配置。

現(xiàn)在我們知道如何創(chuàng)建、獲取模塊了,那么模塊究竟是什么呢?官方的Developer Guide上只有一句話:You can think of a module as a Container for the different parts of your app – controllers, services, filters, directives, etc.現(xiàn)在我還不太理解,大致就是說模塊是一些功能的集合,如控制器、服務(wù)、過濾器、指令等子元素組成的整體?,F(xiàn)在解釋不了,先遺留。

2、$provide和模塊的關(guān)系

The $provide service has a number of methods for registering components with the $injector. Many of these functions are also exposed on angular.Module.

之前提到過:module和provide是用來注冊服務(wù)到injector中的。查看官方的API,可以看到$provide提供了provide()、constant()、value()、factory()、service()來創(chuàng)建各種不同性質(zhì)的服務(wù);angular.Module中也提供了這5個服務(wù)注冊方法。其實2者功能是完全一樣的,就是用來向DI容器注冊服務(wù)到injector中。

官方API下的auto有$provide 和 $injector,Implicit module which gets automatically added to each $injector.按照字面意思是說,每一個injector都有這2個隱含的服務(wù)。但1.2.25版本中,感覺沒有辦法獲取injector中的$provide。不知道這是為什么?一般來說也不需要顯示使用這個服務(wù),直接使用module中提供的API即可。

var injector = angular.injector();
alert(injector.has("$provide"));//false
alert(injector.has("$injector"));//true

3、angular.injector()

使用angular.injector();也能獲取到注入器,但是沒有和模塊綁定。這種做法是沒有意義的,相當于是你創(chuàng)建了一個空的DI容器,里面都沒有服務(wù)別人怎么用呢。正確的做法是,在創(chuàng)建注入器的時候,指定需要加載的模塊。

// 創(chuàng)建myModule模塊、注冊服務(wù)
var myModule = angular.module('myModule', []);
myModule.service('myService', function() {
      this.my = 0;
});
// 創(chuàng)建herModule模塊、注冊服務(wù)
var herModule = angular.module('herModule', []);
herModule.service('herService', function() {
      this.her = 1;
});
// 加載了2個模塊中的服務(wù)
var injector = angular.injector(["myModule","herModule"]);
alert(injector.get("myService").my);
alert(injector.get("herService").her);

如果加載了多個模塊,那么通過返回的injector可以獲取到多個模塊下的服務(wù)。這個例子中如果只加載了myMoudle,那么得到的injector就不能訪問herMoudle下的服務(wù)。這里特別需要注意下:angular.injector()可以調(diào)用多次,每次都返回新建的injector對象。

var injector1 = angular.injector(["myModule","herModule"]);
var injector2 = angular.injector(["myModule","herModule"]);
alert(injector1 == injector2);//false

4、angular中三種聲明依賴的方式

angular提供了3種獲取依賴的方式:inference、annotation、inline方式。

// 創(chuàng)建myModule模塊、注冊服務(wù)
var myModule = angular.module('myModule', []);
myModule.service('myService', function() {
      this.my = 0;
});
// 獲取injector
var injector = angular.injector(["myModule"]);
// 第一種inference
injector.invoke(function(myService){alert(myService.my);});
// 第二種annotation
function explicit(serviceA) {alert(serviceA.my);};
explicit.$inject = ['myService'];
injector.invoke(explicit);
// 第三種inline
injector.invoke(['myService', function(serviceA){alert(serviceA.my);}]);

其中annotation和inline方式,對于函數(shù)參數(shù)名稱沒有要求,是推薦的做法;inference方式強制要求參數(shù)名稱和服務(wù)名稱一致,如果JS代碼經(jīng)過壓縮或者混淆,那么功能會出問題,不建議使用這種方式。

更多關(guān)于AngularJS相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《AngularJS入門與進階教程》及《AngularJS MVC架構(gòu)總結(jié)

希望本文所述對大家AngularJS程序設(shè)計有所幫助。

相關(guān)文章

  • Angular2安裝angular-cli

    Angular2安裝angular-cli

    這篇文章主要介紹了Angular2安裝angular-cli ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • angular 數(shù)據(jù)綁定之[]和{{}}的區(qū)別

    angular 數(shù)據(jù)綁定之[]和{{}}的區(qū)別

    這篇文章主要介紹了angular 數(shù)據(jù)綁定之[]和{{}}的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Angular重構(gòu)數(shù)組字段的解決方法示例

    Angular重構(gòu)數(shù)組字段的解決方法示例

    這篇文章主要為大家介紹了Angular重構(gòu)數(shù)組字段的解決方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Angular4.x Event (DOM事件和自定義事件詳解)

    Angular4.x Event (DOM事件和自定義事件詳解)

    今天小編就為大家分享一篇Angular4.x Event (DOM事件和自定義事件詳解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Angular中的Promise對象($q介紹)

    Angular中的Promise對象($q介紹)

    這篇文章主要介紹了Angular中的Promise對象($q介紹),本文講解了Promise模式、Q Promise的基本用法、AngularJs中的$q.defferd等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • AngularJS基礎(chǔ)知識筆記之過濾器

    AngularJS基礎(chǔ)知識筆記之過濾器

    在我們開發(fā)中經(jīng)常需要在頁面顯示給用戶的信息需要一定處理格式化,才能顯示給用戶。比如時間本地化,或者yyyy-MM-dd HH:mm:ss格式,數(shù)字精度格式化,本地化,人名格式化等等。在angularjs中為我們提供了叫filter的指令,讓我們能夠很輕易就能做到著一些列的功能
    2015-05-05
  • 如何利用@angular/cli V6.0直接開發(fā)PWA應(yīng)用詳解

    如何利用@angular/cli V6.0直接開發(fā)PWA應(yīng)用詳解

    這篇文章主要給大家介紹了如何利用@angular/cli V6.0直接開發(fā)PWA應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用@angular/cli V6.0具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2018-05-05
  • AngularJS服務(wù)service用法總結(jié)

    AngularJS服務(wù)service用法總結(jié)

    這篇文章主要介紹了AngularJS服務(wù)service用法,結(jié)合實例形式總結(jié)分析了服務(wù)Service的概念、功能及自定義服務(wù)的相關(guān)操作技巧,需要的朋友可以參考下
    2016-12-12
  • 發(fā)布Angular應(yīng)用至生產(chǎn)環(huán)境的方法

    發(fā)布Angular應(yīng)用至生產(chǎn)環(huán)境的方法

    這篇文章主要介紹了發(fā)布Angular應(yīng)用至生產(chǎn)環(huán)境的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • angularjs 獲取默認選中的單選按鈕的value方法

    angularjs 獲取默認選中的單選按鈕的value方法

    下面小編就為大家分享一篇angularjs 獲取默認選中的單選按鈕的value方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02

最新評論

凯里市| 汽车| 永宁县| 泰顺县| 普定县| 韶山市| 日照市| 杨浦区| 桃园市| 鄯善县| 丽水市| 湟中县| 陆河县| 南陵县| 新晃| 宁德市| 银川市| 林甸县| 永德县| 舞钢市| 永德县| 玉龙| 尚志市| 万山特区| 九江市| 康马县| 招远市| 鹤壁市| 伊川县| 肥城市| 焦作市| 文山县| 临沂市| 高州市| 固始县| 利津县| 巴林左旗| 淮北市| 拜城县| 平塘县| 凤台县|