angular原始碼分析1 模組化管理

2022-07-23 04:12:11 字數 3021 閱讀 2813

version:1.3.0

angular.js載入後,首先初始化。初始化包括以下3個部分:

(1)bindjquey()方法繫結jquery。如果之前載入有jquey,則angulae.element與jquery繫結,否則,angular.element使用angular自己實現的jqlite。

(2)publishexternalapi(angular)給angular新增屬性方法,屬性方法暴漏出來,建立模組載入器。

即生成angular.module()函式,用於註冊模組、獲取模組、給模組註冊自己的service、controller 、factory、direactive等。通過setupmoduleloader(window)函式把乙個函式返回給angularmodule,並且返回的的函式繫結在window.angular.module上。

(1)setupmoduleloader函式實現

第1719行給angular新增到window物件上,並賦值為空物件。即window.angular = {}。

第1720到1766行返回乙個乙個閉包函式function(name,requires,configfn)並且把這個函式賦值給window.angular.module。第1726到1764行給modules對像新增乙個模組name屬性,即註冊的模組儲存到modules物件。modules.name賦值為乙個包含_invokequeue、provider、factory等屬性的moduleinstance物件,這個物件並且返回。moduleinstance物件屬性含義:_invokequeue佇列儲存該模組註冊的provider、factory、service、value、constant、animation、filter、controller、directive。_configblocks佇列儲存該模組註冊的config。_runblocks佇列儲存該模組註冊的run。第1757行到1763行的工具函式invokelater使用了閉包,返回了乙個函式,用於把註冊的資訊放入佇列。

(2)執行過程

通過setupmoduleloader函式返回module函式並且賦值給window.angular.module。通過angular.module函式可以註冊模組、獲取模組以及給每個模組這冊provider、factory、service、value、constant、animation、filter、controller、directive。

html模版:

通過以上**模組的註冊及模組的config、run、service、factory等的註冊,產生的modules物件的資料報含有以下資料:

第3823行把模組的_invokequeue進一步處理並且儲存到providercache物件中,以備在以後的編譯過程中使用。

在載入模組時,通過第3823行**把_invokequeue佇列成員依次處理,並且分別儲存在providercache物件中,以備編譯時使用。

上面的轉換過程通過providecache.$provide的函式來處理。

在上面的處理過程中使用到了$provide,這也是angular的核心。下節分析angular的兩個核心部分$provide和$injector。

Spring Beans模組原始碼分析

spring beans模組是spring三大核心模組 spring beans,spring core,spring context 之一,bean 在 spring 中作用就像 object 對 oop 的意義一樣,沒有物件的概念就像沒有物件導向程式設計,spring 中沒有 bean 也就沒有...

angular原始碼分析4 rootScope

rootscope是註冊在angular的內部模組ng的乙個provider。第2487行 所示,註冊 rootscope服務,name為 rootscope,函式為 rootscopeprovider。等價於如下 angular.module ng config function provide ...

cvDilate 原始碼分析 1

在cv.h檔案中對cvdilate的定義如下 cvapi void cvdilate const cvarr src,cvarr dst,iplconvkernel element cv default null int iterations cv default 1 iplconvkernel 指...